您的收藏是使用手动引用的示例,即在另一个文档中包含一个文档的 _id 字段 DBref。然后,Mongoose 可以发出第二个查询以根据需要解析引用字段。
第二个查询将使用聚合方法,该方法具有 $lookup
运算符,该运算符将执行左外连接到同一数据库中的 "branchmst" 集合,以便筛选出要处理的 "joined" 集合中的文档:
MyModel.aggregate([
{ "$match": { "branch": "5864ac80fa769f09a4881791" } },
{
"$lookup": {
"from": "branchmst",
"localField": "branch",
"foreignField": "_id",
"as": "branchmst"
}
},
{ "$unwind": "$branchmst" }
])
你可以在Mongoose中使用
populate()
函数,前提是你已经在模型定义中显式地定义了refs。
var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;
var mySchema = mongoose.Schema({
createdDate: { type: Date, default: Date.now },
branch: { type: ObjectId, ref: 'Branch' }
})
var branchSchema = mongoose.Schema({
name: String,
address: String
})
var MyModel = mongoose.model('MyModel', mySchema),
Branch = mongoose.model('Branch', branchSchema);
MyModel.find({ "branch": "5864ac80fa769f09a4881791" })
.populate('branch')
.exec(function (err, docs) {
console.log(docs);
});
results.find().populate(branch.$id).exec(function (err, data) { console.log(data) })
});这样对吗? - Hardik Mandankaa