2

私はこのようなコレクションユーザーを持っています:

{
_id: myid,
name : 'blabla',
ia : {
       [0]-> 'an id',
       [1]-> 'a second id'
      }
}

そして、私はiaの最初のIDだけを持ちたいので、そのようなものを試しました:

User.find({ _id: id, ia :{ key : indexia} }, ['ia']).populate('ia').run(rendu);

ここで、id = myid、indexia=0です。

その部分を入れないと: "ia:{key:indexia}"すべてのiaを取得します...しかし、1つだけが必要です。

私が明確だったことを願っています。ありがとう

4

3 に答える 3

2

MongoDBfind()コマンドは、ドキュメント全体を照合することを目的としています。

次のクエリを実行すると

{ _id: id, ia :{ key : indexia} }

...これは「オブジェクトと_id等しい」idia{key:0}を意味します。それはおそらくあなたが望むものではありません。

その部分を入れないと: "ia:{key:indexia}"すべてのiaを取得します...しかし、1つだけが必要です。

特定のドキュメントの一部を返却したいようです。そのためのドキュメントはここにあります。あなたの場合、それは次のようになります:

find({ _id: id}, { 'ia.0' : 1 })

検索の最初の部分でドキュメントが検索されます。2番目の部分は、特定のフィールドを返します。

于 2012-05-26T05:52:41.423 に答える
0

コレクションにスキーマがあるようです。

{ "_id" : "id",
  "ia"  : ["id1","id2","id3"],
   etc.
}

この場合、「ia」フィールドの最初の「id」だけを取得するクエリは次のようになります。

find({}, { "ia" : {$slice:1  } })

$slice演算子の詳細についてはこちらをご覧ください。Mongooseは、クエリページで$slice演算子のサポートを文書化しています。お役に立てれば!

于 2012-05-26T05:54:59.420 に答える
0

あなたの助けをありがとうそれはそのような労働者です:

User.find({ _id: id }).only('ia').slice('ia', indexia, 1).populate('ia').run(rendu);

only('ia')は機能しませんが、大したことではありません。

于 2012-05-30T23:51:26.197 に答える