Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 猫鼬&x2013;将对象相互链接而不复制_Node.js_Mongodb_Mongoose - Fatal编程技术网

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填充引用。