2015-02-07 97 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