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)
它们相互参照:

  • Blog对象包含一个
    Category
    对象(ref)数组,可以获取与此Blog相关的所有类别
  • Category对象包含一个
    Blog
    对象(ref)数组,可以获取该类别的所有Blog
  • 问题是当我试图获得某个博客时。我需要填充类别数组以获取其标题:

    Blog
        .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);                        
        })