Arrays 使用推送和切片更新MongoDB阵列

Arrays 使用推送和切片更新MongoDB阵列,arrays,mongodb,mongodb-query,aggregation-framework,Arrays,Mongodb,Mongodb Query,Aggregation Framework,我想更新MongoDB中的一个文档。在本例中,我有一个属性(events.properties.color),它是一个具有多个(重复)值的数组 我想将此数组更改为具有单个值(红色)的字符串。对于我的数据,我可以假设数组中的每个值都是相同的,因此字符串的值可以只是数组中的第一个值。 我试着用这样的东西反复浏览我的收藏: db.getCollection('cars').update( [ // Match array with >1 value { $

我想更新MongoDB中的一个文档。在本例中,我有一个属性(events.properties.color),它是一个具有多个(重复)值的数组

我想将此数组更改为具有单个值(红色)的字符串。对于我的数据,我可以假设数组中的每个值都是相同的,因此字符串的值可以只是数组中的第一个值。 我试着用这样的东西反复浏览我的收藏:

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
                }
            }
        }
    ]
)
但是我不断得到一个错误:“需要一个对象”,这(我想)意味着我没有正确地引用颜色数组。关于我应该改变什么有什么想法吗?
谢谢

我认为你在做聚合时有点纠结,你想做的是更新。对您的更新进行了一些小的更正,(删除了
[]
$match
):


就这样。谢谢
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
                }
            }
        }
    ]
)
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
            }
        }
    }
)