要通过mongodb node.JS中的_id获取引用集合的对象吗

要通过mongodb node.JS中的_id获取引用集合的对象吗,node.js,mongodb,mongoose,mongodb-query,aggregation-framework,Node.js,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,我想通过引用id集合获取特定记录的所有详细信息 { "_id" : ObjectId("586c8bf63ef8480af89e94ca"), "createdDate" : ISODate("2017-01-04T05:45:26.945Z"), "branch" : { "$ref" : "branchmst", "$id" : "5864ac80fa769f09a4881791", "$db" : "eviral" }, "__v" : 0 } 这是我的收

我想通过引用id集合获取特定记录的所有详细信息

{
"_id" : ObjectId("586c8bf63ef8480af89e94ca"),
"createdDate" : ISODate("2017-01-04T05:45:26.945Z"),
"branch" : {
    "$ref" : "branchmst",
    "$id" : "5864ac80fa769f09a4881791",
    "$db" : "eviral"
    },
"__v" : 0
}

这是我的收藏记录。我需要从branchmst集合中获取所有详细信息,其中_id为5864ac80fa769f09a4881791。

前提是您保存了分支。$id作为类型架构对象

 yourRecord.find({}).populate(branch.$id).exec(function(err, data){
  console.log(data)
})

您的收藏是使用手动引用的一个示例,即在另一个文档中包含一个文档的_id字段。然后,Mongoose可以根据需要发出第二个查询来解析引用的字段

第二个查询将使用聚合方法,该方法具有将在同一数据库中执行branchmst集合的左外部联接的运算符,以从联接的集合中筛选文档进行处理:

MyModel.aggregate([
    { "$match": { "branch": "5864ac80fa769f09a4881791" } },
    {
        "$lookup": {
            "from": "branchmst",
            "localField": "branch",
            "foreignField": "_id",
            "as": "branchmst"
        }
    },
    { "$unwind": "$branchmst" }
])
如果在模型定义中明确定义了参照,也可以在Mongoose中使用该函数,即

var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;

// define the main schema
var mySchema = mongoose.Schema({
    createdDate: { type: Date, default: Date.now },
    branch: { type: ObjectId, ref: 'Branch' }  
})

// define the branch schema
var branchSchema = mongoose.Schema({
    name: String,
    address: String  
})

// compile the models
var MyModel = mongoose.model('MyModel', mySchema),
    Branch = mongoose.model('Branch', branchSchema);

// populate query
MyModel.find({ "branch": "5864ac80fa769f09a4881791" })
       .populate('branch')
       .exec(function (err, docs) {
           //console.log(docs[0].branch.name);
           console.log(docs);
       });

什么是provideid?它是您传递的id的变量名。如果您想查找任何特定文档,否则只需在没有id:provideid的情况下继续。它将填充所有记录var objModel=require'../models/logModel',objModel.findfunction err,results{if err{return res.send500,{error:err};}results.find.populatebranch.$id.execfunction err,data{console.logdata};是这样吗?让我们来。