1

レストランに対応するメニュー項目を保存する必要があるので、このようなことをしました

{ name: 'Foo',
  menu: 
 [ { item: 'foo',
   description: '...',
   price: 20 },
 { item: 'bar',
   description: '...',
   price: 30 } ]
}

問題は、時々このアイテムにアクセスする必要があることですが、これを行うのは簡単ではありません。代わりにこのようなものを使用する必要がありますか?

{ name: 'Foo',
menu: 
{ "0": { item: 'foo',
   description: '...',
   price: 20 },
 "1": { item: 'bar',
   description: '...',
   price: 30 } }
}

特定の商品を探す方が安いと思います。

4

1 に答える 1

1

番号付きキーを介してアクセス可能な埋め込みオブジェクトを使用することが正しいアプローチになることはめったにありません。MongoDB には、より優れた柔軟性を提供する配列内の項目へのアクセスを容易にする演算子があります。

必要な配列要素だけを取り出す方法については、射影演算子$elemMatchと射影演算子を参照してください。$

たとえば'foo'、最初のサンプル ドキュメントからメニュー項目を取得するには、次のようにします。

db.restaurants.findOne({name: 'Foo'}, {menu: {$elemMatch: {item: 'foo'}}});
于 2012-10-22T00:15:47.360 に答える