我有以下架构:
var PostSchema = mongoose.Schema({
idol: { type: Schema.Types.ObjectId, ref: 'User' },
views: [ String ],
likes: [ String ],
...
});
var UserSchema = mongoose.Schema({
name: String,
email: String,
...
});
我有以下聚合查询:
Post.aggregate([
{ $match : { '$idol.name' : new RegExp(query, 'gi') } },
{ $skip : page * 20 },
{ $limit : 20 }
], function(err, posts) {}
此代码返回以下错误:
[MongoError: exception: bad query: BadValue unknown top level operator: $idol.name]
有没有办法匹配嵌套文档中的内容?
感谢。
答案 0 :(得分:1)
删除'$ idol.name'中的$,只需使用'idol.name'。这应该处理错误,但是,我认为这不起作用,因为你实际上并没有将用户对象存储在每个帖子中,而只是存储在ObjectId中。当Mongo尝试聚合时,它只会看到ObjectId,而不是用户。