Mongodb Mongoose-填充包含其他字段的对象
我有一个对象数组。我想保存集合中的某些部分,并引用第二个集合来检索补充数据 系列1Mongodb Mongoose-填充包含其他字段的对象,mongodb,mongoose,Mongodb,Mongoose,我有一个对象数组。我想保存集合中的某些部分,并引用第二个集合来检索补充数据 系列1 statute: [{ _id: { type: ObjectId, ref: "Statute" }, subsection: [{ header: String, }], }], 使用.populate(“法规号”、“产权法规”) 我希望得到以下输出: "statute": [ { "subsection": [], "_id":
statute: [{
_id: { type: ObjectId, ref: "Statute" },
subsection: [{
header: String,
}],
}],
使用.populate(“法规号”、“产权法规”)
我希望得到以下输出:
"statute": [
{
"subsection": [],
"_id": "5c15bcf348549e2aac5e99d3",
"title": 13,
"statute": 103
},
]
但我收到的结果是
"statute": [
{
"subsection": [],
"_id": {
"_id": "5c15bcf348549e2aac5e99d3",
"title": 13,
"statute": 103
}
},
如何告诉Mongoose根据规约进行填充。\u id但返回规约中的值?据我所知,这是不可能的,因为这意味着在模式中添加/覆盖字段,这使得Mongoose在点击.save()时无法知道如何处理这些字段在这样创建的对象上 但是,除非您需要一个实际的mongoose对象,否则您可以将聚合函数与一些lookup+projection魔法结合使用,类似于这样(不过,您可能需要适应您的文档结构): 注意:您可能需要添加一个组阶段来将结果合并回一个数组中。如果您不知道法规的确切字段是什么样子的,您还可以查看应用于填充法规的函数,但我觉得这不适合您的用例 另外,我建议您将_id字段重命名为更具描述性的名称,如statuteId,因为这可能会干扰mongoose设置的_id字段
statute.aggregate([
{ $match : {}},
{ $unwind: '$statute'} // splitting the array into separate fields
{
$lookup: // see https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
{
from: 'Statute',
localField: '_id',
foreignField: '_id,
as: 'remote_statute'
}
},
{
$project: {
"subsection": '$subsection',
"_id": "$remote_statute._id",
"title": '$remote_statute.title',
"statute": '$remote_statute.statute'
}
}
])