Node.js 猫鼬&x2013;将对象相互链接而不复制
我有一个模型“类别”。集合Node.js 猫鼬&x2013;将对象相互链接而不复制,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个模型“类别”。集合类别包含多个对象。 我也有一个模型“职位”。集合posts可能包含许多包含用户帖子的对象。“Post”对象可能与1+个类别相关。如何将“Post”对象链接到1+“Category”-对象,而不将“Post”-对象作为子文档放置在“Category”-对象中?当然,我需要有一个选择,以找到与某些类别相关的所有职位 我可以想象的一种方式是将与之相关的所有类别的对象id存储在“Post”中。Smth是这样的: var postSchema = mongoose.Schema(
类别
包含多个对象。
我也有一个模型“职位”。集合posts
可能包含许多包含用户帖子的对象。“Post”对象可能与1+个类别相关。如何将“Post”对象链接到1+“Category”-对象,而不将“Post”-对象作为子文档放置在“Category”-对象中?当然,我需要有一个选择,以找到与某些类别相关的所有职位
我可以想象的一种方式是将与之相关的所有类别的对象id存储在“Post”中。Smth是这样的:
var postSchema = mongoose.Schema({
title: String,
description: String,
category: [ObjectId],
created_time: Number,
})
然后添加类别
post.category.push(obj_id);
但这真的是猫鼬的方式吗?哪条路正确?谢谢
另外,我也读过猫鼬文档中的种群方法,它对我的情况有用吗?我仍然不完全清楚这是什么。是一个更好的工具,因为您正在创建帖子和类别之间的多对多关系。子文档仅属于父对象时是合适的。您需要更改postSchema以使用引用:
var postSchema = mongoose.Schema({
title: String,
description: String,
category: [{ type: Schema.Types.ObjectId, ref: 'Category' }],
created_time: Number,
});
您可以通过将文档推送到数组中来添加类别:
post.category.push(category1);
post.save(callback);
然后在查询过程中使用“填充”:
Post.findOne({ title: 'Test' })
.populate('category')
.exec(function (err, post) {
if (err) return handleError(err);
console.log(post.category);
});
谢谢
post.category.push(category1)中的category1应该是什么代码>?它应该是带有objectID的字符串还是smth-else?还有一个问题:什么是“补液”?这个过程做什么?为什么我需要它?它应该是一个实际的类别模型实例。我所说的再水化只是指用实际文档而不是ID填充引用。