Javascript 如何从JSON文档数组中提取字段数组?

Javascript 如何从JSON文档数组中提取字段数组?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有两个mongodb系列,stu creds和stu profile。我首先要从stu creds中检索所有学生记录,其中stu pref\u contact是电子邮件,然后对于那些stu ids,我要从stu profile中检索完整的档案。问题是,第一个查询返回一个JSON文档数组,每个文档包含一个字段stu\u id。以下是我的查询和结果: db.stu_creds.find({"stu_pref_contact" : "email"}, {'_id' : 1}) 结果: [{ "_i

我有两个mongodb系列,
stu creds
stu profile
。我首先要从
stu creds
中检索所有学生记录,其中
stu pref\u contact
是电子邮件,然后对于那些
stu id
s,我要从
stu profile
中检索完整的档案。问题是,第一个查询返回一个JSON文档数组,每个文档包含一个字段
stu\u 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文档数组


有没有更简单的方法

嗯,是我遗漏了什么,还是你想要的只是以下内容:

var results = [];
for(var i = 0; i < yourArray.length; i++) {
    results.push(yourArray[i]._id);
}
var结果=[];
for(var i=0;i
使用Array.map()。这允许您对数组的每个元素执行转换,并返回一个新的转换项数组

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

Array.map是在ECMAScript 5中引入的。如果您使用的是node.js、现代浏览器或数组polyfill,则应该可以使用它。

您可以使用
$或

db.stu_profile.find({ $or : results }) // `results` is your list of ObjectId's
但是它比
中的
$慢得多,所以我建议使用其他答案之一;)