2015-02-07 101 views
0

我有以下模式:猫鼬总比赛嵌套文件

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

删除'$ idol.name'中的$,只需使用'idol.name'即可。这应该照顾的错误,但是,我不认为这工作,因为你实际上不是在每个帖子内存储用户对象,但只有ObjectId。当Mongo尝试进行聚合时的含义,它只会看到ObjectId,而不是用户。

+0

我知道。我只需要知道是否有一种方法来使用猫鼬填充聚合框架。 – 2015-02-08 00:07:47

+0

不幸的是,这是不可能的。 Aggregate()是一个MongoDB操作,而populate()是一个高级别的Mongoose抽象。调用populate()类似于调用两个Mongo find()调用。 Mongo无法自行加入集合。 – 2015-02-08 00:31:51