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

我有2个mongodb集合, stu_credsstu_profile 。 我首先要从stu_creds中检索所有学生logging,其中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子句检索学生configuration文件的一部分。 我必须通过数组,并创build一个新的数组,这只是一个对象id的数组,而不是一个JSON文档的数组。

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

使用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; }); 

在ECMAScript 5中引入了Array.map。如果使用node.js,现代浏览器或Array填充,应该可以使用。

嗯,我错过了什么,或者是你想要的以下内容:

 var results = []; for(var i = 0; i < yourArray.length; i++) { results.push(yourArray[i]._id); } 

您可以使用$or

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

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