Node.js 猫鼬&x2013;如何限制populate()级别的深度?
我有两种模式:Node.js 猫鼬&x2013;如何限制populate()级别的深度?,node.js,mongodb,mongoose,populate,Node.js,Mongodb,Mongoose,Populate,我有两种模式: var categorySchema = mongoose.Schema({ title: String, blogs: [{ type: ObjectId, ref: 'Blog' }] }) var blogSchema = mongoose.Schema({ title: String, description: String, category: [{ type: ObjectId, ref: 'Category' }],
var categorySchema = mongoose.Schema({
title: String,
blogs: [{ type: ObjectId, ref: 'Blog' }]
})
var blogSchema = mongoose.Schema({
title: String,
description: String,
category: [{ type: ObjectId, ref: 'Category' }],
created: {type: Number, default: new Date().getTime()}
})
var Category = mongoose.model('Category', categorySchema)
var Blog = mongoose.model('Blog', blogSchema)
它们相互参照:
Category
对象(ref)数组,可以获取与此Blog相关的所有类别Blog
对象(ref)数组,可以获取该类别的所有BlogBlog
.findOne({_id: _._id})
.populate('category')
.exec(function (err, __) {
callback(err, __);
})
我得到
{ title: 'My Blog',
description: 'description',,
_id: 51cb6bd845ba145e02000001,
__v: 0,
created: 1372285906662,
category:
[ { __v: 0,
_id: 51cb5ed6fd63867905000002,
priority: 3,
title: 'Music',
blogs: [Object] } ],
}
是的,我有分类标题,但我也有博客中的一些对象——它们也被填充了。但是Blog对象可能包含很多子对象(posts),正如我们所记得的category
field。所以,category字段中的所有对象都将以递归方式填充,因为我在博客和category之间有交叉链接,所以它将以循环方式填充
如何限制人口水平?我不想填充Blog/category[n]/blogs:[]
,只想直接填充category
字段,例如title
。谢谢。来自:
有争议的是,我们真的需要两套指针
失去同步。相反,我们可以跳过填充,直接查找()
我们感兴趣的故事
我将删除类别模式中博客的引用,只查询您感兴趣的文档
“博客对象包含一个类别对象数组(REF),可以获取与此博客相关的所有类别:”
“Category对象包含一个Blog对象(ref)数组,用于获取该类别的所有Blog”:
这是的简化语法,它实际上在类别数组中搜索指定id
Blog.findOne({_id: blogId})
.populate('category')
.exec(function (err, blog) {
callback(err, blog);
//blog.category is the array you want
})
Blog.find({category: catId})
.exec(function (err, blogs) {
callback(err, blogs);
})