MongoDB使用或查询更新多个子文档

托尔加女巫

我想一次对多个子文档进行更新查询。在满足我查询条件的情况下,我将所有子文档状态设置为被动。

db.deduplications.update(  
{ $and: [ 
    { "_id": "189546D623FC69E3B693FDB679DBC76C" }, 
    { "DeviceVersionPairs.DeviceId": ObjectId("5822d0606bfdcd6ec407d9b9") }, 
    { "DeviceVersionPairs.CloudFolderId": ObjectId("5823110e6bfdd46ec4357582") },
    { "DeviceVersionPairs.CloudFileId": ObjectId("582311168cd396223499942a") },
    { "DeviceVersionPairs.VersionId": ObjectId("582311168cd396223499942b") }
] },
{ $set: { "DeviceVersionPairs.$.Status": "passive" }});

上面的查询恰好找到一个子文档,然后根据需要进行更新。但;

db.deduplications.update(  
{ $or: [ { $and: [ 
        { "_id": "189546D623FC69E3B693FDB679DBC76C" }, 
        { "DeviceVersionPairs.DeviceId": ObjectId("5822d0606bfdcd6ec407d9b9") }, 
        { "DeviceVersionPairs.CloudFolderId": ObjectId("5823110e6bfdd46ec4357582") },
        { "DeviceVersionPairs.CloudFileId": ObjectId("582311168cd396223499942a") },
        { "DeviceVersionPairs.VersionId": ObjectId("582311168cd396223499942b") }
    ] } ,   
    { $and: [ 
        { "_id": "189546D623FC69E3B693FDB679DBC76C" }, 
        { "DeviceVersionPairs.DeviceId": ObjectId("56dfe1356caaea14a819f1e4") }, 
        { "DeviceVersionPairs.CloudFolderId": ObjectId("583fb4bc6e7f341874f13bfc") }, 
        { "DeviceVersionPairs.CloudFileId": ObjectId("583fb539e015b8a53fb71872") }, 
        { "DeviceVersionPairs.VersionId": ObjectId("583fb4ca6e7f331874213584") }
    ] } ] },
{ $set: { "DeviceVersionPairs.$.Status": "passive" }});

当我使用or填充查询段并添加其他项时,它会显示错误:

WriteResult({
    "nMatched" : 0,
    "nUpserted" : 0,
    "nModified" : 0,
    "writeError" : {
        "code" : 16837,
        "errmsg" : "The positional operator did not find the match needed from the query. Unexpanded update: DeviceVersionPairs.$.Status"
    }
})

我在这里想念什么?

谢沙布·罗伊(Shaishab Roy)

您收到此错误

位置运算符未从查询中找到所需的匹配项

因为您的第二个查询与多个子文档匹配当前,无法使用位置运算符使用位置运算符来更新数组中的所有项目。

因此,要解决您的问题,您可以按照以下步骤进行

  1. 使用_id查找文档,并使用$ elemMatch查找子文档,然后

  2. 更新每个子文档并再次保存文档

可以这样尝试:

db.deduplications.find(  
{ $or: [ {
         "_id": ObjectId("583fc558668bde730a460e11") , 
        "DeviceVersionPairs":{
            $elemMatch:{ "DeviceId": ObjectId("5822d0606bfdcd6ec407d9b9") , 
            "CloudFolderId": ObjectId("5823110e6bfdd46ec4357582") ,
            "DeviceVersionPairs.CloudFileId": ObjectId("582311168cd396223499942a") ,
            "DeviceVersionPairs.VersionId": ObjectId("582311168cd396223499942b") }}
    } ,   
    { 
        "_id": ObjectId("583fc558668bde730a460e11") , 
        "DeviceVersionPairs":{
            $elemMatch:{ "DeviceId": ObjectId("56dfe1356caaea14a819f1e4") , 
            "CloudFolderId": ObjectId("583fb4bc6e7f341874f13bfc") , 
            "CloudFileId": ObjectId("583fb539e015b8a53fb71872") , 
            "VersionId": ObjectId("583fb4ca6e7f331874213584") }}
    } ] 
}).forEach(function (doc) {
    doc.DeviceVersionPairs.forEach(function (device) {
      device.status = 'passive';
    });
    db.deduplications.save(doc);
 });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MongoDB多个子查询

来自分类Dev

MongoDB过滤多个子文档

来自分类Dev

MongoDB:排序多个子文档

来自分类Dev

MongoDB-在node.js中使用多个$ elemMatch运算符更新多个子文档级别

来自分类Dev

MongoDB-更新多个文档中数组中的多个子文档

来自分类Dev

使用$ group对mongodb中多个子文档中的字段求和

来自分类Dev

通过猫鼬更新多个子文档?

来自分类Dev

如何使用$ set和$ elemMatch之类的东西更新MongoDB文档数组中的单个子文档?

来自分类Dev

如何在MongoDB中使用多个条件更新多个文档?

来自分类Dev

在mongodb中更新多个文档

来自分类Dev

如何使用原子查询更新猫鼬中另一个子文档中的一个子文档?

来自分类Dev

如何使用原子查询更新猫鼬中另一个子文档中的一个子文档?

来自分类Dev

MongoDB:更新多个文档,但不更新

来自分类Dev

如何在MongoDB中匹配多个子文档?

来自分类Dev

如何在MongoDB中匹配多个子文档?

来自分类Dev

对多个子查询表使用 count(*) 函数

来自分类Dev

MongoDB 更新查询多个条件

来自分类Dev

MongoDB - 多个查询和单个文档结果

来自分类Dev

从春季mongo更新mongodb中的多个文档

来自分类Dev

多个嵌套文档中的MongoDB更新数组

来自分类Dev

在 MongoDB 中插入或更新多个文档

来自分类Dev

PostgreSQL多个子查询

来自分类Dev

如何在同一个子文档上使用多个条件查询和过滤 Solr 6.4 子文档?

来自分类Dev

MS Access在查询中使用多个子查询

来自分类Dev

MongoDB-更新数组中的多个子数组

来自分类Dev

如何使用多个目标更新多个文档

来自分类Dev

具有多个查询文档的MongoDB“查找”查询

来自分类Dev

Mongoose 保存多个子文档

来自分类Dev

我想使用 java 在 mongo db 的集合中更新具有多个查询的文档

Related 相关文章

  1. 1

    MongoDB多个子查询

  2. 2

    MongoDB过滤多个子文档

  3. 3

    MongoDB:排序多个子文档

  4. 4

    MongoDB-在node.js中使用多个$ elemMatch运算符更新多个子文档级别

  5. 5

    MongoDB-更新多个文档中数组中的多个子文档

  6. 6

    使用$ group对mongodb中多个子文档中的字段求和

  7. 7

    通过猫鼬更新多个子文档?

  8. 8

    如何使用$ set和$ elemMatch之类的东西更新MongoDB文档数组中的单个子文档?

  9. 9

    如何在MongoDB中使用多个条件更新多个文档?

  10. 10

    在mongodb中更新多个文档

  11. 11

    如何使用原子查询更新猫鼬中另一个子文档中的一个子文档?

  12. 12

    如何使用原子查询更新猫鼬中另一个子文档中的一个子文档?

  13. 13

    MongoDB:更新多个文档,但不更新

  14. 14

    如何在MongoDB中匹配多个子文档?

  15. 15

    如何在MongoDB中匹配多个子文档?

  16. 16

    对多个子查询表使用 count(*) 函数

  17. 17

    MongoDB 更新查询多个条件

  18. 18

    MongoDB - 多个查询和单个文档结果

  19. 19

    从春季mongo更新mongodb中的多个文档

  20. 20

    多个嵌套文档中的MongoDB更新数组

  21. 21

    在 MongoDB 中插入或更新多个文档

  22. 22

    PostgreSQL多个子查询

  23. 23

    如何在同一个子文档上使用多个条件查询和过滤 Solr 6.4 子文档?

  24. 24

    MS Access在查询中使用多个子查询

  25. 25

    MongoDB-更新数组中的多个子数组

  26. 26

    如何使用多个目标更新多个文档

  27. 27

    具有多个查询文档的MongoDB“查找”查询

  28. 28

    Mongoose 保存多个子文档

  29. 29

    我想使用 java 在 mongo db 的集合中更新具有多个查询的文档

热门标签

归档