我在MongoDB中有一个要更新的文档。在此示例中,我有一个属性(events.properties.color),该属性是具有多个(重复)值的数组。
{
"_id" : ObjectId("5d91fd51abe17b722ca9c82c"),
"createdDate" : ISODate("2019-09-30T13:04:15.077+0000"),
"title" : "My Old Car",
"version" : NumberInt(0)
"events" : [
{
"properties" : {
"color" : [
"red",
"red",
"red",
"red"
]
},
"attributes" : {
"MAKE" : "TOYOTA",
"MODEL" : "COROLLA",
"YEAR" : "1991",
}
}
]
}
我想将此数组更改为具有单个值(红色)的字符串。对于我的数据,我可以假设数组中的每个值都相同,因此字符串的值可以只是数组中的第一个值。 我正在尝试使用以下方法遍历我的收藏集:
db.getCollection('cars').update(
[
// Match array with >1 value
{ $match: { 'events.properties.color.2': {$exists: true} } },
{
//Slice to only include first value in array.
$push:{
'events.$.properties.color':{
$each: [ ],
$slice: 1
}
}
}
]
)
但是我不断收到一个错误:“需要一个对象”,(我认为)意味着我没有正确地引用颜色阵列。关于我应该改变什么的任何想法? 谢谢!
答案 0 :(得分:0)
我想您在进行汇总时有些困惑,您想做的是更新。对您的更新进行了一些小的更正(删除了[]
和$match
):
db.books.update(
// Match array with >1 value
{'events.properties.color.2': {$exists: true}} ,
{
//Slice to only include first value in array.
$push:{
'events.$.properties.color':{
$each: [ ],
$slice: 1
}
}
}
)