使用node.js中的mongoose条件来更新数组

我想更新一个MongoDB集合,我已经创build了一个使用Mongoose的模式。 我的目标是删除名为“警报”的数组中当前时间(过去)以内的所有元素。

这是我的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); 

这是更新。 我正在尝试删除所有小于当前date的警报。

 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的解决scheme:

 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/