Mongoose聚合匹配嵌套文档

时间:2015-02-07 23:30:23

标签: node.js mongodb mongoose

我有以下架构:

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]

有没有办法匹配嵌套文档中的内容?

感谢。

1 个答案:

答案 0 :(得分:1)

删除'$ idol.name'中的$,只需使用'idol.name'。这应该处理错误,但是,我认为这不起作用,因为你实际上并没有将用户对象存储在每个帖子中,而只是存储在ObjectId中。当Mongo尝试聚合时,它只会看到ObjectId,而不是用户。