可以使用猫鼬从引用对象的数组中提取元素吗?
It is possible to pull elements from a referred objects' array using mongoose?
我有 2 个 mongo 模式,一个与另一个相关,使用 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'
}]
});
所以,我想 'refresh' 我的 clients
数组拉取比当前时间少 lastActivity
的所有客户端。我使用 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
小于当前日期的客户。
(显然这段代码不起作用)
问题是我没有找到任何文档或示例来说明是否可以使用嵌套条件 clients.lastActivity
从引用的 ObjectId
模式中提取元素
您需要先从 User
数据库中找到 ID,然后需要 $pull
从 WaitingRoom
数据库中找到它们
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')
})
})
我有 2 个 mongo 模式,一个与另一个相关,使用 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'
}]
});
所以,我想 'refresh' 我的 clients
数组拉取比当前时间少 lastActivity
的所有客户端。我使用 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
小于当前日期的客户。
(显然这段代码不起作用)
问题是我没有找到任何文档或示例来说明是否可以使用嵌套条件 clients.lastActivity
ObjectId
模式中提取元素
您需要先从 User
数据库中找到 ID,然后需要 $pull
从 WaitingRoom
数据库中找到它们
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')
})
})