我试图在Stackoverflow上找到任何类似的问题而没有任何运气。我正在努力寻找在两个文档之间建立关系的正确方法。这是一个非常简单的分层类别案例。每个类别可以有一个父母和多个孩子。
var categorySchema = Schema({
name: String,
parent: { type: Schema.ObjectId, ref: 'Category' },
children: [{ type: Schema.ObjectId, ref: 'Category' }],
order: Number
});
var Category = mongoose.model('Category', categorySchema);
当我创建一个新的类别时,我得到它应该拥有的(如果有的话)父类的_id。我从POST / PUT请求获取此_id作为字符串,并使用此_id获取类别。获取工作正常,我得到正确的类别作为结果。但这是我挣扎的地方,我如何使用mongoose查询返回的结果来创建新类别及其父类之间的关系?
var query = Category.find({'_id': parentCategoryID});
query.select('name');
query.exec(function (err, parentCategory) {
if (!err) {
console.log("Fetched parentCategory: "+parentCategory+".. parentCategory._id: "+parentCategory._id);
var parent = parentCategory.toObject();
var category = new Category();
category.name = name;
category.parent = Schema.ObjectId(parent._id);
的console.log 获取的parentCategory:{name:'Parent Category',_ id: 5218dcd6e6887dae40000002} .. parentCategory._id:undefined
我尝试过多种不同的方式设置父属性,但我无法让它工作。还没有找到关于这个问题的文件。
非常感谢有关此事的任何帮助,我希望更多的人可以从这个问题的任何答案中受益。
答案 0 :(得分:1)
//problem 1: `find` returns a list of results. You just need findById
var query = Category.findById(parentCategoryID);
query.select('name');
query.exec(function (err, parentCategory) {
//Problem 2: don't ignore errors. Handle them first and short-circuit return
if (err) {
console.err(err);
return;
}
console.log("Fetched parentCategory: "+parentCategory+".. parentCategory._id: "+parentCategory._id);
//problem 3: mongoose will do the right thing with your schema here
//all you need is
var category = new Category();
category.name = name;
category.parent = parentCategory;
//and don't forget
category.save(...callback....);
}
另请注意,如果您有一个架构,并且您指定了一些与架构不匹配的东西,那么mongoose将丢弃数据,这可能就是您发生的事情,假设您在某个时刻调用了category.save()
。