这是我的数据结构,我想实现一个关系查询,但是查询是嵌套数据字段。我知道在读取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!!!
答案 0 :(得分:0)
不幸的是,Mongoose无法实现您想要实现的目标。 MongoDB或Mongoose中没有连接。填充参考是最接近的等价物。
填充关系时,Mongoose首先解析查询,然后根据初始查询中找到的文档填充引用的集合。这意味着您无法在初始查询中引用相关集合中的字段。
在您的示例中,您在填充title
集合之前尝试引用article
集合的article
字段。
timeline.find({
"article.title":"xxxxxxxxx" // <<-- invalid reference
}).populate('article') ...