У меня есть 2 схемы монго, связанные друг с другом с помощью ObjectId
:
var User = new Schema({
username: {
type:String,
unique: true
},
password: {
type:String
},
verified: {
type: Boolean,
default: false
},
lastActivity:{
type:Date,
default:Date.now
}
});
И схема watitingRoom
со списками всех users
:
var WaitingRoom = new Schema({
lastActivity:{
type:Date,
default:Date.now
},
clients: [{
type : mongoose.Schema.ObjectId,
ref: 'User'
}],
videocalls: [{
type: mongoose.Schema.ObjectId,
ref:'VideoCall'
}]
});
Итак, я хочу «обновить» мой массив clients
, потянув всех клиентов, что на lastActivity
меньше, чем текущее время.Я попробовал это с помощью инструмента $pull
, присутствующего в mongoose
.После поиска в Google и смешивания различных примеров я попробовал что-то вроде:
WaitingRoom.findOneAndUpdate({}, { lastActivity: new Date(),
$pull : {clients : {"clients.lastActivity": { $lt: new Date() }}}
}, options)
.populate("clients")
.exec( function(error, waitingRoom) {
if (err) { return res.status(500).send({ msg: err.message }); }
})
, который находит уникальную комнату ожидания, обновляет поле lastActivity
и пытается вытащить всех клиентов, у которых clients.lastActivity
меньше текущегоdate.
(Очевидно, этот отрыванный код не работает)
Проблема в том, что я не нашел никакой документации или примера, который объясняет, можно ли извлечь элементы из упомянутого ObjectId
схема с использованием вложенного условия clients.lastActivity