0

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

{
    "name":"silver",
    mywants:[
    {"_id":objid(545454ddfdf5),mark:{"english":100,"math":100,"science":100}},
    {"_id":objid(5878784dfd5d),mark:{"english":100,"math":100,"science":100}},
    {"_id":objid(5454dfd44545),mark:{"english":100,"math":100,"science":100}},
    {"_id":objid(541dfee88245),mark:{"english":100,"math":100,"science":100}},
    ]
}

指定されたobjidがmywants配列に存在するかどうかを確認したいと思います。次に、そのobjidが存在する場合、その存在するオブジェクトIDドキュメントをコールバック関数に渡したいので、このように試しました

collection.find("{"name":"silver"},{"mywants._id":objid}).toArray(function(err,res)
{
    console.log(JSON.stringify(res));
})

But, I got output like 

[{"Mywant":[{"_id":"5128b9bc046802720b000003"},
    {"_id":"5128c190046802720b000004"},
    {"_id":"5128c359175e1aa80b000001"}],"_id":"5128b71455e4e0540b000002"}
]

しかし、私はこのようにしたい

{"_id":objid(545454ddfdf5),mark:{"english":100,"math":100,"science":100}}`,

見つけ方?

4

2 に答える 2

1

あなたは電話する必要があります

collection.find({"name":"silver", "mywants._id":objid}).toArray(…)

それ以外の

collection.find({"name":"silver"},{"mywants._id":objid}).toArray(…)

。前者は2つの式( "name": "silver" AND "mywants._id":objid)でクエリを表し、後者は1つの式( "name": "silver")と1つの射影( "mywants._id)です。 ":objid)[返すフィールドを制御します]。詳細については、http://docs.mongodb.org/manual/reference/method/db.collection.find/をご覧ください

于 2013-02-23T14:46:49.873 に答える
0

コードにタイプミスがあります。何をしたいのか明確ではありません。タイプミスと必要な出力を含むサンプルに基づいて(再びタイプミスがあります)、これがあなたの意図したものであると思います:

- name:"silver" で検索を行っていて、その構文で mywants._id フィールド (タイプミスがあります) を戻したい場合。

代わりに、次のものを見つけるつもりだったと思います。

name:"silver" AND "mywants._id" : someSpecificId

対応する mywants エントリを出力します。

db.collection.find({"name":"silver","mywants._id":objid}, {"mywants.$":1, _id:0}).pretty()
于 2013-02-23T15:31:44.123 に答える