MongoDB:通过数组中的一个objectId来查找

我在查询数据库时遇到了麻烦,我想获取所有元素,例如:admin“54bd13864ec56c7c12310a79”,在admins数组中,

用“$ in”试了一下,但是没有奏效,这是否与ObjectId有关?

trainerId = '54bd13864ec56c7c12310a79' GroupSchema.find({'admins': { $in: [ trainerId ] }} 

这是我的分贝:

 { "_id" : ObjectId("54b93e8e3801ae381e3433be"), "groupName" : "Developers Groups", "createdBy" : "Ido", "creationDate" : "Jan 16 2015", "users" : [ ObjectId("54b932c7ac3ec34a85e6246c") ], "admins" : [ ObjectId("54b932c7ac3ec34a85e6246c"), ObjectId("54bd13864ec56c7c12310a79") ], "__v" : 0 } 

Schema模型是:

 module.exports = mongoose.model('Groups' , { groupName: String, createdBy: String, creationDate: String, admins: [{ type : mongoose.Schema.Types.ObjectId, ref: 'Users' }], users: [{ type : mongoose.Schema.Types.ObjectId, ref: 'Users' }] } ); 

将idstring转换为ObjectId:

 var mongoose = require('mongoose'), trainerId = '54bd13864ec56c7c12310a79'; var id = mongoose.Types.ObjectId(trainerId); GroupSchema.find({'admins': id }); 

这是ObjectId:

的ObjectId( “54bd13864ec56c7c12310a79”)

这是string:

trainerId ='54bd13864ec56c7c12310a79'

所以也许你应该在你的查询中使用ObjectId。

如果我正确地理解你的问题,你可能想要使用$ elemMatch 。 当你想检查一个非数组字段是否等于你传递给$ in的数组中指定的值时,应该使用$ in。

如果我正确理解你的问题,你可能可以尝试$unwind聚合,分开pipe理员中的元素。

它看起来像你想匹配父文档与子文档ID。 你可以使用一个简单的查询:

GroupSchema.find({'admins._id': trainerId}})

或者您可以使用$ elemMatch ,但是由于文档说没有必要: 如果您在$ elemMatchexpression式中只指定一个条件,则不需要使用$ elemMatch。

GroupSchema.find({admins: {$elemMatch: {_id: trainerId}}})

至于将string值强制转换为ObjectId ,mongoose会在内部为您自动执行此操作。