Node.js 可以从引用对象';使用猫鼬的数组?
我有两个使用Node.js 可以从引用对象';使用猫鼬的数组?,node.js,mongodb,mongoose,mongoose-schema,mongoose-populate,Node.js,Mongodb,Mongoose,Mongoose Schema,Mongoose Populate,我有两个使用ObjectId的mongo模式,一个与另一个相关: var User = new Schema({ username: { type:String, unique: true }, password: { type:String }, verified: { type: Boolean, default: false }, lastActivity:
ObjectId
的mongo模式,一个与另一个相关:
var User = new Schema({
username: {
type:String,
unique: true
},
password: {
type:String
},
verified: {
type: Boolean,
default: false
},
lastActivity:{
type:Date,
default:Date.now
}
});
还有一个waitingroom
模式,其中列出了所有用户
:
var WaitingRoom = new Schema({
lastActivity:{
type:Date,
default:Date.now
},
clients: [{
type : mongoose.Schema.ObjectId,
ref: 'User'
}],
videocalls: [{
type: mongoose.Schema.ObjectId,
ref:'VideoCall'
}]
});
因此,我想“刷新”我的客户机
数组,将上一个活动
小于当前时间的所有客户机都拉出来。我使用mongoose
中的$pull
工具进行了尝试。在谷歌搜索和混合不同的示例后,我尝试了以下方法:
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
的所有客户端
(显然,这个被剪断的代码不起作用)
问题是,我没有找到任何文档或示例来解释是否可以使用嵌套条件
客户机从引用的ObjectId
架构中提取元素。lastActivity
您需要首先从用户
数据库中找到ID,然后需要从等候室
数据库
User.find({ lastActivity: new Date() }).then((users) => {
const ids = []
users.map((user) => {
ids.push(user._id)
})
WaitingRoom.update({}, { $pull: { clients: ids }}, { multi: true }).then(() => {
console.log('removed')
})
})