2015-04-16 66 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'是什麼? –