如何检索子文档特定字段的数组-mongodb
这是我的第一个mongodb项目,我在mongodb中有这个文档结构,我试图检索一个特定的用户帐户(每个用户帐户都有一个联系人数组),从这个用户帐户中,我将获得一个用户联系人ID字段数组,然后将这个数组作为参数传递给另一个查询,我这样做是为了避免为了获得ID字段而必须循环通过users contacts数组,这是文档结构,我尝试的查询就在下面如何检索子文档特定字段的数组-mongodb,mongodb,mongoose,Mongodb,Mongoose,这是我的第一个mongodb项目,我在mongodb中有这个文档结构,我试图检索一个特定的用户帐户(每个用户帐户都有一个联系人数组),从这个用户帐户中,我将获得一个用户联系人ID字段数组,然后将这个数组作为参数传递给另一个查询,我这样做是为了避免为了获得ID字段而必须循环通过users contacts数组,这是文档结构,我尝试的查询就在下面 { name, id, contacts:[{ contactId, //I need an array of t
{
name,
id,
contacts:[{
contactId, //I need an array of this field
dateAdded
},
contactId,
dateAdded
},
{}..]
}
//
var findByIdAll = function(accountId, callback) {
var self=this;
//Get the user account
Account.findOne({_id:accountId}, function(err,doc) {
/ After the user account has been obtained, the function below will
// use an array of the users contactsId's to fetch the contact's accounts
//please how do I obtain the array of contact Id's before reaching here
self.Account.find({_id:{$in:[/array of contact Ids]}},function(err,results){
callback(results);
});
});
};
编辑
//现在,我可以使用以下查询获得contactID字段数组
var r=db.accounts.aggregate({$match:{email:'m@live.com'}},{$unwind:"$contacts"},
{$project:{_id:0,contacts:1}},{$group:{_id:'$_id',
list:{$push:'$contacts.accountId'}}});
The result I get from the query is
r
一个普通的MongoDB查询将始终为您提供具有相同结构的整个文档。 如果您只想获取文档的一部分或对其进行转换,则需要使用(不像看起来那么难理解,请尝试一下)
在您的情况下,您可能必须在contacts中使用来分解阵列,以仅获取您想要的帐户,并根据您的需要呈现数据。谢谢,我没有获得所需的输出,展开生成一个对象数组,每个对象都有父文档的投影字段和子文档的索引这里是我尝试的db.accounts.aggregate({$match:{email:'m@live.com'}},{$unwind:“$contacts”,{$project:{accountId:1}});当我使用project时,它只对父文档有效,而不对子文档有效。在$project中,您必须指定要返回的所有字段。这就像当您从中选择field1,field2+1作为新字段一样。…尝试包括contacts我正在获取contacts,但是否可以只投影contact和plac的Id字段使用聚合方法在数组中创建这些ID字段?因为project似乎会影响父文档,但对于子文档(contacts),它会返回所有字段
{
"result" : [
{
"_id" : null,
"list" : [
ObjectId("51c59a31c398c40c22000004"),
ObjectId("51c59a31c398c40c22000004")
]
}
],
"ok" : 1
}