2013-07-16 56 views
1

我有2个mongodb集合,stu_credsstu_profile。我首先要从stu_creds中检索所有学生记录,其中stu_pref_contact是电子邮件,然后是那些stu_id s我想从stu_profile检索完整的个人资料。问题是,第一个查询返回一组JSON文档,每个文档都有一个字段,即stu_id。这里是我的查询和结果:如何从JSON文档数组中提取字段数组?

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文档。

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

回答

0

嗯,我失去的东西或者是你想要的所有如下:

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

你可以使用$or

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

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

相关问题