这可能是一个愚蠢的问题,但我现在已经花了很长时间。
所以这是我的结构,高度最小化:
{
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})
我该如何查询?
答案 0 :(得分:4)
使用$ elemMatch投影:
db.heroes.find({name : "Some dude"}, {'deck' : {$elemMatch:{name:'Awesome card}}})
请参阅文档here。
答案 1 :(得分:1)
您可以使用$
位置运算符来标识字段选择中匹配的deck
数组元素的索引:
db.heroes.find(
{name : "Some dude", 'deck.name' : 'Awesome card'},
{_id: 0, name: 1, 'deck.$.name': 1}
);
答案 2 :(得分:-2)
deck = deck.filter(function (card) { return card.name === 'Awesome card' });
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter