1

这是我的第一个 mongodb 项目,我在 mongodb 中有这个文档结构,我正在尝试检索一个特定的用户帐户(每个用户帐户都有一个联系人数组),然后从这个用户帐户获取一个 ID 字段数组的用户联系人,然后将此数组作为参数传递给另一个查询,我这样做是为了避免必须遍历用户联系人数组才能获取 ID 字段,这是文档结构,我尝试的查询如下它

{
  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);
    });
    });
  };

编辑 //我现在已经能够使用以下查询获得一个联系人 ID 字段数组

 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

{
        "result" : [
                {
                        "_id" : null,
                        "list" : [
                                ObjectId("51c59a31c398c40c22000004"),
                                ObjectId("51c59a31c398c40c22000004")
                        ]
                }
        ],
        "ok" : 1
}
4

1 回答 1

3

普通的 MongoDB 查询将始终为您提供具有相同结构的整个文档。如果您只想获取文档的一部分或对其进行转换,则需要使用聚合框架(并不像看起来那么难理解,试一试)。

在您的情况下,您可能必须在联系人中使用$unwind来展开数组,使用$match来仅获取所需的帐户,并使用$project来根据需要显示数据。

于 2013-06-26T14:21:07.203 回答