我正在尝试更新一个mongodb集合,我已经创建了一个使用mongoose的模式。我的目标是删除一个名为“警报”的数组中所有小于(过去)当前时间的元素。
这是我的猫鼬模式:
var mongoose = require('mongoose');
var ReminderSchema = new mongoose.Schema({
firstName: String,
lastName: String,
phone: Number,
email: String,
medication: String,
alarms: [Date]
});
module.exports = mongoose.model('Reminder', ReminderSchema);
这是最新消息。我正在尝试删除所有小于当前日期的警报。
var date = new Date();
var Reminder = require('./models/Reminders.js');
//remove ALL alarms that are are before current time
Reminder.update({alarms: {$lte: date}}, {$pullAll: {alarms: {$lte: date}}}, function(err, updated){
if(err){
console.log(err);
}
else {
console.log(updated);
}
});
我当前收到此错误:
{ [MongoError: $pullAll requires an array argument but was given a Object]
name: 'MongoError',
message: '$pullAll requires an array argument but was given a Object',
driver: true,
index: 0,
code: 2,
errmsg: '$pullAll requires an array argument but was given a Object' }
有什么想法吗?
最佳答案
$pullAll
接收的数组不是对象:
{ $pullAll: { <field1>: [ <value1>, <value2> ... ], ... } }
$pullall运算符删除指定值的所有实例
从现有数组。不像$pull运算符
元素通过指定查询,$pullall删除匹配的元素
列出的值。
您应该使用$pull的解决方案:
Reminder.update({alarms: {$lte: date}},{$pull:{alarms: { $lte : new Date()}}},
function(err, updated){
if(err){
console.log(err);
}
else {
console.log(updated);
}
});
https://docs.mongodb.org/manual/reference/operator/update/pullAll/