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')
  })
})