我有这个收藏集,名称为'product_number'
{
"_id" : ObjectId("5e2fd6f7413b5d25be4ac9b6"),
"product_id" : ObjectId("5e2fd4447ec0863eb053dc5d"),
"shipment" : "R",
"product_print_company" : ObjectId("5e12efdca7b696ea1d3c7f32"),
"reg_date" : "2020-01-28 06:38:47",
"product_nums" : [
{
"product_number" : "MultiProdNum1",
"product_brand" : "digitech",
"product_date" : "2020-01-27",
"product_manufacturer" : "山田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
},
{
"product_number" : "MultiProdNum2",
"product_brand" : "",
"product_date" : "2020-01-27",
"product_manufacturer" : "福田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
}
],
"mod_date" : "2020-01-28 07:52:09"
}
我进行了查询以更新product_status。
db.getCollection('product_number').update(
{'$and': [
{'_id': ObjectId('5e2fd6f7413b5d25be4ac9b6')},
{'product_nums.product_number': {'$in': ['MultiProdNum1', 'MultiProdNum2']}}
]},
{'$set': {'product_nums.$.product_status': 'S'}}
)
我的预期结果是两个数组的product_status被更改product_status ='S'
但是仅更改了product_number ='MultiProdNum1'数组。
我也尝试过。
db.getCollection('product_number').update(
{'$and': [
{'_id': ObjectId('5e2fd6f7413b5d25be4ac9b6')},
{'product_nums.product_number': {'$in': ['MultiProdNum1', 'MultiProdNum2']}}
]},
{'$set': {'product_nums.$[].product_status': 'S'}}
)
将[]
添加到{'$set': {'product_nums.$
当我尝试这样做时,即使我仅这样设置过滤器MultiProdNum1,所有数组数据也会更新。
db.getCollection('product_number').update(
{'$and': [
{'_id': ObjectId('5e2fd6f7413b5d25be4ac9b6')},
{'product_nums.product_number': {'$in': ['MultiProdNum1']}}
]},
{'$set': {'product_nums.$[].product_status': 'S'}}
)
我想要仅与product_number相匹配的多个更新数组数据。
谢谢。
您可以尝试将.findOneAndUpdate()与arrayFilters
结合使用来实现这一目标:
查询:
db.getCollection('product_number').findOneAndUpdate(
{ "_id": ObjectId("5e2fd6f7413b5d25be4ac9b6"), 'product_nums.product_number': { '$in': ['MultiProdNum1'] } },
{
$set: {
'product_nums.$[item].product_status': 'S',
}
},
{
arrayFilters: [{ 'item.product_number': { '$in': ['MultiProdNum1'] } }],
returnNewDocument: true
})
收集数据:
/* 1 */
{
"_id" : ObjectId("5e2fd6f7413b5d25be4ac9b1"),
"product_id" : ObjectId("5e2fd4447ec0863eb053dc5d"),
"shipment" : "R",
"product_print_company" : ObjectId("5e12efdca7b696ea1d3c7f31"),
"reg_date" : "2020-01-28 06:38:47",
"product_nums" : [
{
"product_number" : "MultiProdNum1",
"product_brand" : "digitech",
"product_date" : "2020-01-27",
"product_manufacturer" : "山田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
},
{
"product_number" : "MultiProdNum2",
"product_brand" : "",
"product_date" : "2020-01-27",
"product_manufacturer" : "福田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
},
{
"product_number" : "MultiProdNum1",
"product_brand" : "digitech2222222222222",
"product_date" : "2020-01-27",
"product_manufacturer" : "山田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
}
],
"mod_date" : "2020-01-28 07:52:09"
}
/* 2 */
{
"_id" : ObjectId("5e2fd6f7413b5d25be4ac9b6"),
"product_id" : ObjectId("5e2fd4447ec0863eb053dc5d"),
"shipment" : "R",
"product_print_company" : ObjectId("5e12efdca7b696ea1d3c7f32"),
"reg_date" : "2020-01-28 06:38:47",
"product_nums" : [
{
"product_number" : "MultiProdNum1",
"product_brand" : "digitech",
"product_date" : "2020-01-27",
"product_manufacturer" : "山田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
},
{
"product_number" : "MultiProdNum2",
"product_brand" : "",
"product_date" : "2020-01-27",
"product_manufacturer" : "福田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
},
{
"product_number" : "MultiProdNum1",
"product_brand" : "digitech22222222222",
"product_date" : "2020-01-27",
"product_manufacturer" : "山田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
}
],
"mod_date" : "2020-01-28 07:52:09"
}
结果:
/* 1 */
{
"_id" : ObjectId("5e2fd6f7413b5d25be4ac9b1"),
"product_id" : ObjectId("5e2fd4447ec0863eb053dc5d"),
"shipment" : "R",
"product_print_company" : ObjectId("5e12efdca7b696ea1d3c7f31"),
"reg_date" : "2020-01-28 06:38:47",
"product_nums" : [
{
"product_number" : "MultiProdNum1",
"product_brand" : "digitech",
"product_date" : "2020-01-27",
"product_manufacturer" : "山田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
},
{
"product_number" : "MultiProdNum2",
"product_brand" : "",
"product_date" : "2020-01-27",
"product_manufacturer" : "福田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
},
{
"product_number" : "MultiProdNum1",
"product_brand" : "digitech2222222222222",
"product_date" : "2020-01-27",
"product_manufacturer" : "山田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
}
],
"mod_date" : "2020-01-28 07:52:09"
}
/* 2 */
{
"_id" : ObjectId("5e2fd6f7413b5d25be4ac9b6"),
"product_id" : ObjectId("5e2fd4447ec0863eb053dc5d"),
"shipment" : "R",
"product_print_company" : ObjectId("5e12efdca7b696ea1d3c7f32"),
"reg_date" : "2020-01-28 06:38:47",
"product_nums" : [
{
"product_number" : "MultiProdNum1",
"product_brand" : "digitech",
"product_date" : "2020-01-27",
"product_manufacturer" : "山田",
"product_number_type" : "Q",
"product_status" : "S",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
},
{
"product_number" : "MultiProdNum2",
"product_brand" : "",
"product_date" : "2020-01-27",
"product_manufacturer" : "福田",
"product_number_type" : "Q",
"product_status" : "F",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
},
{
"product_number" : "MultiProdNum1",
"product_brand" : "digitech22222222222",
"product_date" : "2020-01-27",
"product_manufacturer" : "山田",
"product_number_type" : "Q",
"product_status" : "S",
"product_eos_hx" : "c0947adbae4e52bec538f41d9e57414aa878e134e3885cb0c717ee649789bbb5",
"product_eos_status" : "P",
"prodcut_qrcode" : "X903fMr6SINiOG87ADCos8qVUI8I3I3MqQz5n65aFFMH1WRf+vCZ3nZBEXjT0dtb"
}
],
"mod_date" : "2020-01-28 07:52:09"
}