2

这可能是一个菜鸟问题,但是我现在已经花了很长时间了。

所以这是我的结构,高度最小化:

{
  name : 'Some dude', 
  deck : [{
    name : 'Awesome card',
    value : 30
  },
  {
    name : 'another awesome card',
    value: 50
  }]
}

我想从牌组中的所有卡片中进行选择,其中 name == 'Awesome card',返回这个

{
  name : 'Some dude', 
  deck : [{
    name : 'Awesome card',
    value : 30
  }]
}

一直在尝试大量命令,例如

db.heroes.find({name : "Some dude"}, {'deck' : 1, 'deck.name' : 'Awesome card})

我应该如何查询这个?

4

3 回答 3

4

使用 $elemMatch 投影:

db.heroes.find({name : "Some dude"}, {'deck' : {$elemMatch:{name:'Awesome card}}})

请参阅此处的文档。

于 2012-10-14T15:25:19.137 回答
1

您可以使用位置运算符来标识字段选择中$匹配数组元素的索引:deck

db.heroes.find(
    {name : "Some dude", 'deck.name' : 'Awesome card'}, 
    {_id: 0, name: 1, 'deck.$.name': 1}
);
于 2012-10-14T15:22:14.647 回答
-2
deck = deck.filter(function (card) { return card.name === 'Awesome card' });

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter

于 2012-10-14T15:15:16.983 回答