Я определил PostSchema
следующим образом.post
записывается author
и может быть прочитано многими людьми: lastOpens
является массивом { time: ... , userId: ... }
.
var PostSchema = new mongoose.Schema({
title: { type: String }
author: { type: mongoose.Schema.Types.ObjectId, ref: 'user' },
lastOpens: { type: Array, default: [] }
})
Теперь я хочу написать статический метод, которыйвозвращает все сообщения, прочитанные одним пользователем:
PostSchema.statics.postsOpenedByUser = function (userId, cb) {
// need to go through all the posts, and check their `lastOpens`.
// If `userId` is in `userId` of a `lastOpen`, then count the post in
}
Мне известны такие методы, как find({ ... })
из MongoDB.Но я не знаю, как задать более сложный поиск, как мой.
Может ли кто-нибудь помочь?
Редактировать 1: Я пытался использовать оператор $where
какследовательно, это не сработало:
PostSchema.statics.postsOpenedByUser = function (userId, cb) {
return this.find({ $where: function () {
var index = -1;
for (var i = 0; i < this.lastOpens.length; i++)
if (this.lastOpens[i].userId === userId) { index = i; break }
return !(index === -1)
}}, cb)
Есть ли что-то, что мы не могли сделать внутри $where
?