我有一個用戶模式是這樣的:
user : {
myArmy : {
mySoldiers : [
{
positioned : false,
soldierInfo : {
_id : s99212
}
},
{
positioned : true,
soldierInfo : {
_id : s99112
}
}
]
}
},
user : {
myArmy : {
mySoldiers : [
{
positioned : true,
soldierInfo : {
_id : s99212
}
},
{
positioned : false,
soldierInfo : {
_id : s99112
}
}
]
}
}
...
我有我想要做回誰已經戰士ID s99212定位用戶(S)(真)查詢:(可能是成千上萬的那些,我需要閱讀和檢索它們全部)
這是我與貓鼬故障查詢:
var soldierId = s99212;
stream = User.find({
$and: [
{'myArmy.mySoldier.positioned': {$ne: null}},
{'myArmy.mySoldier.soldierInfo._id': soldierId}
]
}).lean(true).stream();
沒有被該查詢返回的,應該有另一種方式來做到這一點$之類的東西?
究竟是如何我想使用$ elemMatch,如果在所有,它應該而不是發現? (如果它值得一提的,我想回到完整的用戶對象,不只是它的一部分...)
試過,墜毀我的應用程序:
stream = User.find({
'$elemMatch': [
{'myArmy.mySoldiers.pos': {$ne: null}},
{'myArmy.mySoldiers.soldierInfo._id': soldierId}
]
}).lean(true).stream();
我知道我有一個小小的語法問題在哪裏?
[只檢索MongoDB集合中對象數組中的查詢元素]的可能重複(http://stackoverflow.com/questions/3985214/retrieve-only-the-queried-element-in-an-object-array -in-mongodb的收集)。在查詢中使用'$ elemMatch'解決方案需要應用於相同的數組元素。這就是'$ elemMatch'所做的。 –
我不認爲$ elemMatch應該在我的情況下,我需要完整的用戶對象,如果士兵身份證是由這個結構定位,你會介意讓我直嗎? – totothegreat
您正在閱讀的錯誤答案。查看文檔中的['elemMatch'](http://docs.mongodb.org/master/reference/operator/query/elemMatch/),然後再查看答案。請記住,「你」是要求知道更好的人的建議的人。 'elemMatch'是你在這裏需要匹配元素上的兩個屬性。不以任何方式改變對象。 –