MongoDB:如何检索包含特定值的数组?

时间:2017-04-28 12:03:55

标签: mongodb mongodb-query

如果我有这个架构:

user={ email:String,things:[],rules:[{name:String,devicesInvolved:[]} ]

我无法检索包含规则中涉及的特定设备的所有用户和规则。 例如,我想检索其规则中涉及的设备中包含特定设备的所有用户。

1 个答案:

答案 0 :(得分:0)

使用positional operator $仅投影数组中的匹配元素

db.user.find({'rules.devicesInvolved':'device1'}, {email:1, 'rules.$':1})

编辑:

以上查询将仅返回第一个匹配项。如果您想要数组中的所有匹配元素,那么最好使用聚合

db.user.aggregate(
  {$unwind: '$rules'},
  {$match: {'rules.devicesInvolved': 'device1'}},
  {$group: {_id: '$_id', rules: {$addToSet: '$rules'}}}
)