如何在keystone.js(mongoose)中嵌套查询关系数据?

时间:2015-01-29 14:13:23

标签: javascript node.js mongodb mongoose keystonejs

这是我的数据结构,我想实现一个关系查询,但是查询是嵌套数据字段。我知道在读取mongoose文件后嵌套查询的基本用法,但是当我测试但没有返回时。请帮帮我,我将不胜感激。

//Define
var TimeLine = new keystone.List('TimeLine', {
    hidden:true
});
TimeLine.add({
    article:{type:Types.Relationship,ref:'Post'}
});

var Post = new keystone.List('Post', {
    map: { name: 'title' },
    autokey: { path: 'slug', from: 'title', unique: true }
});

Post.add({
    title: { type: String, required: true },
    state: { type: Types.Select, options: 'draft, published, archived', default: 'draft', index: true },
    author: { type: Types.Relationship, ref: 'User', index: true },
    publishedDate: { type: Types.Date, index: true, dependsOn: { state: 'published' } },
    image: { type: Types.CloudinaryImage },
    content: {
        brief: { type: Types.Html, wysiwyg: true, height: 150 },
        extended: { type: Types.Html, wysiwyg: true, height: 400 }
    }
});
//Usage

var timeline = keystone.list('TimeLine').model;
    timeline.find({
        "article.title":"xxxxxxxxx"//Here is a nested query
    }).populate('article').exec(function (err, result) {
        console.log(err,result);//This is the query results, but it can not return anything.
    });

//nothing return!!!

1 个答案:

答案 0 :(得分:0)

不幸的是,Mongoose无法实现您想要实现的目标。 MongoDB或Mongoose中没有连接。填充参考是最接近的等价物。

填充关系时,Mongoose首先解析查询,然后根据初始查询中找到的文档填充引用的集合。这意味着您无法在初始查询中引用相关集合中的字段。

在您的示例中,您在填充title集合之前尝试引用article集合的article字段。

timeline.find({
    "article.title":"xxxxxxxxx" // <<-- invalid reference
}).populate('article') ...