MongoDB:在多个字段上进行单个更新V / S在单个字段上进行多个更新?

Abhinandan kothari

我有一个包含7个数组的集合,每个数组包含1000多个子文档。
IE

{  
    "_id": 1,
    "arr1": [
        { "date": 20100101, "time": 120000, "key": "value1" },
        { "date": 20100401, "time": 121500, "key": "value2" },
        ...
        { "date": 20161001, "time": 120000, "key": "valueN" },
    ],
    .
    .
    "arr7": [
        { "date": 20100101, "time": 120000, "key": "value1" },
        { "date": 20100401, "time": 121500, "key": "value2" },
        ...
        { "date": 20161001, "time": 120000, "key": "valueN" },
    ]
}

我想从所有数组中提取早于特定日期的活动。我是否应该执行一个更新,该更新将立即从每个数组中提取匹配的子文档,即

db.collection.updateMany({}, { $pull: { arr1: { date: { $lt: 151031 } }, arr2: { date: { $lt: 151031 } }, ... arr7: { date: { $lt: 151031 } } } })

还是我应该为每个数组分别执行更新。IE

db.collection.updateMany({}, { $pull: { arr1: { date: { $lt: 20160101 } } } })
db.collection.updateMany({}, { $pull: { arr2: { date: { $lt: 20160101 } } } })
...
db.collection.updateMany({}, { $pull: { arr7: { date: { $lt: 20160101 } } } })

哪个会更有效?

埃里克

我会说你应该使用一个查询从所有数组中提取

db.collection.updateMany({}, { $pull: { arr1: { date: { $lt: 151031 } }, arr2: { date: { $lt: 151031 } }, ... arr7: { date: { $lt: 151031 } } } })

这使mongo查询优化器可以完全控制执行。例如,它可能只需要访问每个对象一次,而不是七次。

您应该使用explain()虽然查看查询的确切执行(请参阅https://docs.mongodb.com/v3.2/reference/method/cursor.explain/)。

您还可能需要考虑更改数据模型,因为每个文档限制mongo 16MB可能会引起问题。同样,mongo中的数组索引对于如此庞大的数组来说效率很低。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MongoDB设置多个字段进行更新

来自分类Dev

在多个字段上进行客户端验证

来自分类Dev

Elasticsearch:无法在多个字段上进行过滤

来自分类Dev

在多个字段上进行透视并从Access中导出

来自分类Dev

ElasticSearch在多个字段上进行过滤(具有聚集)

来自分类Dev

在单个查询中基于多个字段进行分组

来自分类Dev

弹性搜索在单个查询请求中更新多个字段

来自分类Dev

如何更新多个 solr 文档中的单个字段值

来自分类Dev

在具有模糊匹配的多个字段上进行弹性搜索,并在多个字段的综合得分上进行排序

来自分类Dev

mongoDB更新单个数组元素中的多个字段(来自表单)

来自分类Dev

在对象列表上进行LINQ查询以获取基于多个字段的分布

来自分类Dev

在ElasticSearch中的多个字段上进行单词和短语搜索

来自分类Dev

使用awk在单独行上的多个字段上进行数学运算

来自分类Dev

在更新时对多个字段进行猫鼬定制验证

来自分类Dev

从多个JSON字段创建单个字段

来自分类Dev

在MongoDB中更新多个字段的值

来自分类Dev

多个字段的单个虚拟属性定义

来自分类Dev

从单个字段过滤多个值-Django

来自分类Dev

在多个字段中搜索单个值

来自分类Dev

使用 EF 更新单个字段

来自分类Dev

在单个查询中更新MySQL数据库上的多个字段

来自分类Dev

Django 和 Pymongo - 接受多个输入并更新所有对象中的单个字段

来自分类Dev

如何在多达49个字段上进行PIVOT?

来自分类Dev

更新多个字段以获取多个记录

来自分类Dev

在单个页面上进行多个刷卡初始化?

来自分类Dev

mongodb C#驱动程序更新多个字段

来自分类Dev

Java + MongoDB:更新文档中的多个字段

来自分类Dev

按多个字段对列表进行排序

来自分类Dev

最佳NoSQL,可在多个索引/字段上进行过滤

Related 相关文章

  1. 1

    MongoDB设置多个字段进行更新

  2. 2

    在多个字段上进行客户端验证

  3. 3

    Elasticsearch:无法在多个字段上进行过滤

  4. 4

    在多个字段上进行透视并从Access中导出

  5. 5

    ElasticSearch在多个字段上进行过滤(具有聚集)

  6. 6

    在单个查询中基于多个字段进行分组

  7. 7

    弹性搜索在单个查询请求中更新多个字段

  8. 8

    如何更新多个 solr 文档中的单个字段值

  9. 9

    在具有模糊匹配的多个字段上进行弹性搜索,并在多个字段的综合得分上进行排序

  10. 10

    mongoDB更新单个数组元素中的多个字段(来自表单)

  11. 11

    在对象列表上进行LINQ查询以获取基于多个字段的分布

  12. 12

    在ElasticSearch中的多个字段上进行单词和短语搜索

  13. 13

    使用awk在单独行上的多个字段上进行数学运算

  14. 14

    在更新时对多个字段进行猫鼬定制验证

  15. 15

    从多个JSON字段创建单个字段

  16. 16

    在MongoDB中更新多个字段的值

  17. 17

    多个字段的单个虚拟属性定义

  18. 18

    从单个字段过滤多个值-Django

  19. 19

    在多个字段中搜索单个值

  20. 20

    使用 EF 更新单个字段

  21. 21

    在单个查询中更新MySQL数据库上的多个字段

  22. 22

    Django 和 Pymongo - 接受多个输入并更新所有对象中的单个字段

  23. 23

    如何在多达49个字段上进行PIVOT?

  24. 24

    更新多个字段以获取多个记录

  25. 25

    在单个页面上进行多个刷卡初始化?

  26. 26

    mongodb C#驱动程序更新多个字段

  27. 27

    Java + MongoDB:更新文档中的多个字段

  28. 28

    按多个字段对列表进行排序

  29. 29

    最佳NoSQL,可在多个索引/字段上进行过滤

热门标签

归档