Node.js 更新数组mongodb中的多个元素
当日期大于特定值时,我想将chargeList isDelete属性更新为true。我的模式如下Node.js 更新数组mongodb中的多个元素,node.js,mongodb,mongoose,mongoose-schema,Node.js,Mongodb,Mongoose,Mongoose Schema,当日期大于特定值时,我想将chargeList isDelete属性更新为true。我的模式如下 { "chargeList": [ { "date": ISODate("2013-06-26T18:57:30.012Z"), "price": "123", "isDelete": false }, { "date": ISODate("2013-06-27T18:57:30.012
{
"chargeList": [
{
"date": ISODate("2013-06-26T18:57:30.012Z"),
"price": "123",
"isDelete": false
},
{
"date": ISODate("2013-06-27T18:57:30.012Z"),
"price": "75",
"isDelete": false
}
]
}
var ChargeListSchema= new Schema({
date: { type: Date , default: Date.now },
price: { type: String, required: false },
isDelete: { type: Boolean, default: false }
});
var ScheduleChargeSchema = new Schema({
chargeList:[ChargeListSchema]
});
模式如下
{
"chargeList": [
{
"date": ISODate("2013-06-26T18:57:30.012Z"),
"price": "123",
"isDelete": false
},
{
"date": ISODate("2013-06-27T18:57:30.012Z"),
"price": "75",
"isDelete": false
}
]
}
var ChargeListSchema= new Schema({
date: { type: Date , default: Date.now },
price: { type: String, required: false },
isDelete: { type: Boolean, default: false }
});
var ScheduleChargeSchema = new Schema({
chargeList:[ChargeListSchema]
});
我尝试了以下代码,但它只更新chargeList数组中匹配的第一个元素
Model.update(
{
"_id": 1,
"chargeList": {
"$elemMatch": {
"date": {
$gt: ISODate("2013-06-26T18:57:30.012Z")
}
}
}
},
{
"$set": { "chargeList.$.isDelete": true }
}
)
您需要使用更新数组中的多个元素
Model.update(
{ "_id": 1, "chargeList.date": { "$gt": ISODate("2013-06-26T18:57:30.012Z") }},
{ "$set": { "chargeList.$[].isDelete": true } }
)
这不会更新任何人的记录。它确实有效。。。请检查一下你的情况。。。或者发布你的模式…将模式添加到帖子中。我的猫鼬版本是4.11.6。你可以看到这个和这个