1

したがって、私のコレクションは次のようになります。

{
  "_id" : ObjectId("52722429d874590c15000029"),
  "name" : "Bags",
  "products" : [{
      "_id" : ObjectId("527225b5d87459b802000029"),
      "name" : "Prada",
      "description" : "Prada Bag",
      "points" : "234",
      "validDate" : 1382562000,
      "link" : "dasdad",
      "code" : "423423424",
      "image" : null
    }, {
      "_id" : ObjectId("5272307ad87459401a00002a"),
      "name" : "Gucci",
      "description" : "Gucii bag",
      "points" : "2342",
      "validDate" : 1383170400,
      "link" : "dsadada",
      "code" : "2342",
      "image" : null
    }]
}

_id 527225b5d87459b802000029 の製品のみを取得したいので、これを試しました:

$this->find(array(
                '_id' => new \MongoId('52722429d874590c15000029'),
                'products._id' => new \MongoId('527225b5d87459b802000029')
                ));

しかし、それはそのコレクションの配列全体を返します.1つだけが必要です...これはmongoで行うことができますか?

4

1 に答える 1

1

コメントで述べたように、射影、より正確には$elemMatch. その場合、集約フレームワークを使用する必要はありません。

例 :

find( { _id: 1, "products._id": 4 }, { products: { $elemMatch: { _id: 4 } } } ).pretty()
于 2013-10-31T13:19:14.793 に答える