2015-02-07 3 views
0

У меня есть следующие схемы: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

Удалите $ in '$ idol.name', просто используйте 'idol.name'. Это должно позаботиться об ошибке, однако, я не думаю, что это работает, поскольку вы на самом деле не сохраняете пользовательский объект внутри каждого сообщения, а только ObjectId. Значение, когда Mongo пытается объединить, будет видеть ObjectId, а не пользователя.

+0

Я знаю это. Мне просто нужно знать, есть ли способ заполнить структуру агрегации с помощью мангуста. –

+0

К сожалению, это невозможно. Aggregate() - операция MongoDB, а populate() - абстракция Мангуста высокого уровня. Вызов populate() сродни вызову двух вызовов Mongo find(). Монго не может вступать в коллекцию сам по себе. –

Смежные вопросы