相关疑难解决方法(0)

mongo可以upsert数组数据吗?

我有一个像这样的mongo文档.

{
    "_id" : ObjectId("50b429ba0e27b508d854483e"),
    "array" : [
        {
            "id" : "1",
            "letter" : "a"
        },
        {
            "id" : "2",
            "letter" : "b"
        }
    ],
    "tester" : "tom"
}
Run Code Online (Sandbox Code Playgroud)

我希望能够array使用单个mongo命令插入和更新,而不是在find()当时运行中使用条件insert(),update()具体取决于对象的存在.

id是我想成为选择器的项目.所以如果我用这个更新数组:

{
    "id" : "2",
    "letter" : "c"
}
Run Code Online (Sandbox Code Playgroud)

我必须使用一个$set声明

db.soup.update({
    "tester":"tom",
    'array.id': '2'
}, {
    $set: {
        'array.$.letter': 'c'
    }
})
Run Code Online (Sandbox Code Playgroud)

如果我想在数组中插入一个新对象

{
    "id" : "3",
    "letter" : "d"
}
Run Code Online (Sandbox Code Playgroud)

我必须使用一个$push声明

db.soup.update({
    "tester":"tom"
}, { …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js

37
推荐指数
3
解决办法
2万
查看次数

使用mongo同时拉和添加

我有一个集合,哪些元素可以简化为:

{tags : [1, 5, 8]}

数组中至少有一个元素,所有元素都应该不同.我想用一个标签替换另一个标签,我认为不会有问题.所以我想出了以下查询:

db.colll.update({
  tags : 1
},{
  $pull: { tags: 1 },
  $addToSet: { tags: 2 }
}, {
  multi: true
})
Run Code Online (Sandbox Code Playgroud)

很酷,所以它会找到所有带有我不需要的标签的元素(1),删除它并添加另一个(2)如果它不存在.问题是我收到一个错误:

"无法同时更新'标签'和'标签'"

这基本上意味着我不能同时做pull和addtoset.有没有其他方法可以做到这一点?

当然,我可以记住元素的所有ID,然后删除标记并添加单独的查询,但这听起来不太好.

mongodb mongodb-query

16
推荐指数
3
解决办法
1万
查看次数

如何更新MongoDB文档中的数组元素匹配条件?

我有一个带有数组字段的文档,类似于:

{ 
  "_id" : "....",
  "Statuses" : [
    { "Type" : 1, "Timestamp" : ISODate(...) },
    { "Type" : 2, "Timestamp" : ISODate(...) },
    //Etc. etc.
  ]
}
Run Code Online (Sandbox Code Playgroud)

如何通过指定其类型值来更新特定状态项的时间戳?

mongodb

6
推荐指数
2
解决办法
6723
查看次数

mongodb upsert更新数组元素

想要在文档数组中的对象属性中进行插入

考虑收集m中的文档

{ "_id" : ObjectId("524bfc39e6bed5cc5a9f3a33"), 
 "x" : [       
    { "id":0.0, "name":"aaa"},{ "id":1.0, "name":"bbb"}  
 ]
}
Run Code Online (Sandbox Code Playgroud)

要添加age:100{ "id":0.0, "name":"aaa"}.不仅仅是年龄..但是在数组元素{}中提供upsert.所以它可以包含{age:100,"city":"amd"}(因为我从应用程序服务获得这个)

正在尝试这个...但没有工作,因为它取代了整个数组元素

db.m.update({_id:ObjectId("524bfc39e6bed5cc5a9f3a33"),
     "x" : {
                "$elemMatch" : {
                        "id" : 0.0
                }
}},
{
        $set : {
                "x.$" : {
                    "age": 100
            }
        }
},
{upsert: true}
)
Run Code Online (Sandbox Code Playgroud)

将文档更改为(我不想要的)

 { "_id" : ObjectId("524bfc39e6bed5cc5a9f3a33"), 
     "x" : [       
        { "age":100},{ "id":1.0, "name":"bbb"}  
     ]
    }
Run Code Online (Sandbox Code Playgroud)

如果不改变架构,这是否可行.

mongodb

5
推荐指数
1
解决办法
8902
查看次数

标签 统计

mongodb ×4

mongodb-query ×1

node.js ×1