搜索对象数组中的特定项,并查询属性是否存在

时间:2015-10-16 00:28:58

标签: javascript mongodb meteor

示例数据:

{
  _id: '1234',
  games: [{
    name: 'World of Warcraft',
    lastLogin: ISODate(),
    subscriptions: ['56', '78']
  }, {
    name: 'Starcraft II',
    lastLogin: ISODate()
  }]
}

基本上,我想找到每个没有给定游戏的“订阅”字段的人。我无法找到一个好方法。

Players.update({
  'games.name': 'World of Warcraft',
  'games.$.subscriptions': { $exists: false }
}, {
  $set: { 'games.$.subscriptions': GLOBAL_SUB }
});

如何查询属性的元素数组以及字段的存在?

1 个答案:

答案 0 :(得分:3)

如果要匹配同一数组元素上的多个术语,请使用$elemMatch

Players.update({
    games: { $elemMatch: {
        name: 'World of Warcraft',
        subscriptions: { $exists: false }
    }}
}, {
    $set: { 'games.$.subscriptions': GLOBAL_SUB }
});