2015-04-16 65 views
1

我遇到麻烦查询找到一个对象ID数据库,我想获得的所有元素的有,例如:在管理员阵列管理员“54bd13864ec56c7c12310a79”,MongoDB的:在阵列

与尝试过“ $ 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 
} 

的架构模式是:

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' }] 
} 
); 

回答

1

转换的ID字符串的ObjectId:

var mongoose = require('mongoose'), 
    trainerId = '54bd13864ec56c7c12310a79'; 
var id = mongoose.Types.ObjectId(trainerId); 

GroupSchema.find({'admins': id }); 
+1

那么你得到了我的方式来解决: 这就是: VAR trainerId =猫鼬.Schema.Types.ObjectId(trainerId); GroupSchema。找到({'管理员':{$ in:[trainerId]}} 我标记为您的同意答案谢谢:) –

+1

它的工作感谢:) –

+0

@Jumpy_Goat无后顾之忧:-) – chridam

1

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

+0

如何在ObjectId的情况下使用$ elemMatch? 我试过了:db.groups.find('admins':{$ elemMatch:{'54b932c7ac3ec34a85e6246c'}})但它没有工作 –

+0

尝试'{elemMatch:{$ eq:'54b932c7ac3ec34a85e6246c'}} – Prusse

+0

没有任何工作.... –

1

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

4

这是的ObjectId:

的ObjectId( “54bd13864ec56c7c12310a79”)

,这是字符串:

trainerId = '54bd13864ec56c7c12310a79'

所以也许你应该在你的曲目中使用ObjectId红霉素。

+0

行动太快...... 没有工作,我得到0行.... –

1

看起来要与子文档ID父文件相匹配。您可以使用一个简单的查询:

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

或者你可以使用$elemMatch,但作为医生说这是没有必要的:如果只指定在$ elemMatch表达一个条件,你不需要使用$ elemMatch。

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

至于字符串值转换成一ObjectId,猫鼬会自动为你做这个内部。

+0

我没有得到一个例外他们但我得到0结果。 我仔细检查ID ...它是正确的。 “.find({'admins':{$ elemMatch:{'_id':'54b932c7ac3ec34a85e6256c'}}})”and“.find({'admins._id':'54b932c7ac3ec34a85e6256c'}})”didn' t工作 –

+0

什么是'GroupSchema'?约定使用内部模型名称作为模型对象名称:“Group”。也就是说,如果您使用猫鼬,您必须将字符串值强制转换为ObjectId,这非常奇怪。你可以发布你正在使用的哪种版本的猫鼬和'GroupSchema'是什么? –