Arrays 使用推送和切片更新MongoDB阵列
我想更新MongoDB中的一个文档。在本例中,我有一个属性(events.properties.color),它是一个具有多个(重复)值的数组 我想将此数组更改为具有单个值(红色)的字符串。对于我的数据,我可以假设数组中的每个值都是相同的,因此字符串的值可以只是数组中的第一个值。 我试着用这样的东西反复浏览我的收藏: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 { $
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
}
}
}
)