我有一个用户模式是这样的:
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'是你在这里需要匹配元素上的两个属性。不以任何方式改变对象。 –