使用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/