1

我有 2 个 mongodb 集合,stu_creds并且stu_profile. 我首先想从电子邮件的stu_creds位置检索所有学生记录stu_pref_contact,然后对于那些stu_id我想从中检索完整个人资料的学生记录stu_profile。问题是,第一个查询返回一个 JSON 文档数组,每个文档包含一个字段,即stu_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第二个查询的子句的一部分来检索学生资料。我必须遍历数组并创建一个新数组,它只是一个对象 id 数组而不是 JSON 文档数组。

有没有更简单的方法来做到这一点?

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、现代浏览器或 Array polyfill,它应该可以使用。

于 2013-07-16T15:09:53.340 回答
0

Ummm, am I missing something or is all you want the following:

var results = [];
for(var i = 0; i < yourArray.length; i++) {
    results.push(yourArray[i]._id);
}
于 2013-07-16T15:08:29.223 回答
0

你可以使用$or

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

但它比 慢得多$in,所以我建议使用其他答案之一;)

于 2013-07-16T15:24:22.407 回答