1

私は 2 つの mongodb コレクションを持っていstu_credsますstu_profile。最初に、メールのstu_creds場所からすべての学生の記録を取得し、次にから完全なプロファイルを取得したいと考えています。問題は、最初のクエリが JSON ドキュメントの配列を返し、各ドキュメントが 1 つのフィールド ( . ここに私のクエリと結果があります:stu_pref_contactstu_idstu_profilestu_id

db.stu_creds.find({"stu_pref_contact" : "email"}, {'_id' : 1})

結果:

[{ "_id" : ObjectId("51927cc93080baac04000001") },
{ "_id" : ObjectId("51927d7b3080baac04000002") },
{ "_id" : ObjectId("519bb011c5c5035b2a000002") },
{ "_id" : ObjectId("519ce3d09f047a192b000010") },
{ "_id" : ObjectId("519e6dc0f919cfdc66000003") },
{ "_id" : ObjectId("51b39be0c74f0e3d23000012") },
{ "_id" : ObjectId("51b39ca9c74f0e3d23000014") },
{ "_id" : ObjectId("51b39cb7c74f0e3d23000016") },
{ "_id" : ObjectId("51b39e87c74f0e3d23000018") },
{ "_id" : ObjectId("51b39f2fc74f0e3d2300001a") },
{ "_id" : ObjectId("51b39f47c74f0e3d2300001c") },
{ "_id" : ObjectId("518d454deb1e3a525e000009") },
{ "_id" : ObjectId("51bc8381dd10286e5b000002") },
{ "_id" : ObjectId("51bc83f7dd10286e5b000004") },
{ "_id" : ObjectId("51bc85cbdd10286e5b000006") },
{ "_id" : ObjectId("51bc8630dd10286e5b000008") },
{ "_id" : ObjectId("51bc8991dd10286e5b00000a") },
{ "_id" : ObjectId("51bc8a43dd10286e5b00000c") },
{ "_id" : ObjectId("51bc8a7ddd10286e5b00000e") },
{ "_id" : ObjectId("51bc8acadd10286e5b000010") }]

$in問題は、学生のプロファイルを取得するための 2 番目のクエリの句の一部として上記の配列を使用できるとは思わないということです。配列を調べて、JSON ドキュメントの配列ではなく、単なるオブジェクト ID の配列である新しい配列を作成する必要があります。

これを行う簡単な方法はありますか?

4

3 に答える 3

2

Array.map ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map ) を使用します。これにより、配列の各要素に対して変換を実行し、変換されたアイテムの新しい配列を返すことができます。

var arrayOfIds = result.map(function(item){ return item._id; });

Array.map は ECMAScript 5 で導入されました。node.js、最新のブラウザー、または配列ポリフィルを使用している場合は、使用できるはずです。

于 2013-07-16T15:09:53.340 に答える
0

使用できます$or

db.stu_profile.find({ $or : results }) // `results` is your list of ObjectId's

しかし、 よりもかなり遅いので$in、他の回答のいずれかを使用することをお勧めします;)

于 2013-07-16T15:24:22.407 に答える