【发布时间】:2019-05-24 13:57:20
【问题描述】:
我到处寻找在 Mongoose 中相互引用文档的方法。但是包括Populate 在内的所有文档都只有将一个文档的objectID 保存在另一个文档中的示例。考虑到我有一个父文档(“类别”)和多个子文档(“子类别”),我想在子文档中引用父文档,反之亦然。我该怎么做?
我想到的最后一件事是在将文档保存到数据库之前添加 objectID 引用。这是代码:
类别架构:
let mongoose = require("mongoose")
let categorySchema = new mongoose.Schema({
name: String,
sale_type: String,
sub_categories: [{type: mongoose.Schema.Types.ObjectId, ref:
"SubCategory" }]
})
module.exports = mongoose.model("Category", categorySchema)
子类别架构:
let mongoose = require("mongoose")
let subcategorySchema = new mongoose.Schema({
name: String,
sale_type: String,
category: {type: mongoose.Schema.Types.ObjectId, ref: "Category" }
})
module.exports = mongoose.model("SubCategory", subcategorySchema)
主文件:(此路线用于制作新的“类别”)
app.post("/categories", function(req, res){
let name = req.body.name
let sale_type = req.body.sale_type
let sub_categories = req.body.sub_categories.split(",")
let category = new Category({
_id: new mongoose.Types.ObjectId(),
name: name,
sale_type: sale_type,
sub_categories: []
})
sub_categories.forEach(function(element){
let sub_category = new SubCategory({
_id: new mongoose.Types.ObjectId(),
name: element,
sale_type: sale_type,
category: category._id
})
sub_category.save(function(err, subcat){
if (err){
console.log(err);
res.status(500).send("")
} else {
category.sub_categories.push(subcat._id)
}
})
})
category.save(function(err, cat){
if (err){
console.log(err)
res.status(500).send("")
} else {
res.status(200).json(cat)
}
})
})
发生的尴尬事情是,当我点击“/categories”路由创建一个新类别时,这是我从服务器得到的响应,这正是我想要的:
{
"sub_categories": [
"5c2340bf4641017050567fe8",
"5c2340bf4641017050567fea"
],
"_id": "5c2340bf4641017050567fe6",
"name": "cat",
"sale_type": "retail",
"__v": 0
}
但是当我使用 mongo shell 查找类别时,这是实际保存在数据库中的内容:
{ "_id" : ObjectId("5c2340bf4641017050567fe6"), "sub_categories" : [ ],
"name" : "cat", "sale_type" : "retail", "__v" : 0 }
sub_categories 数组为空!!!
【问题讨论】:
标签: javascript mongodb express mongoose