2

これはおそらくお粗末な質問ですが、私は今かなりの時間を費やしています。

これが私の構造であり、非常に最小化されています。

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

デッキ内のすべてのカードから選択したい。名前=='素晴らしいカード'、これを返す

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

次のようなコマンドをたくさん試しています

db.heroes.find({name: "Some dude"}、{'deck':1、'deck.name':'素晴らしいカード})

これをどのように照会する必要がありますか?

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 に答える