【问题标题】:MongoDB updateMany, dynamic filter fieldMongoDB updateMany,动态过滤字段
【发布时间】:2018-01-02 01:02:35
【问题描述】:

使用 .updateMany(filter, update, option) 时。如何为每个文档设置一个动态过滤字段?

我有一个这样的文档数组:

[
    {
        time: 1,
        data: []
    },
    {
        time: 2,
        data: []
    },
    {
        time: 3,
        data: []
    }
]

每个都有唯一的时间戳。如果时间戳已经存在,则应使用新数据更新相应的文档,但如果时间不存在,则创建一个新文档。

https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/

但看起来,.updateMany() 只允许静态过滤器字段。像这样

Candles.updateMany({time: 'someStaticTime'}, documents);

虽然我更喜欢这样的东西

Candles.updateMany({time: $currentInsertingDocument.time}, documents);

如果不单独循环每个文档,这可能吗??

【问题讨论】:

  • 你能澄清一下你想要什么吗?我将其读作“如果时间已经存在,则应更新文档,否则创建新时间”,这让我印象深刻,将所有时间字段设置为新的时间戳,不是吗?
  • 我更新了问题。是的,确实是正确的,它是一个文档数组,索引键在某种程度上是唯一的时间戳。因此,如果一个文档来自已经存在的时间戳,则应该更新该文档,否则创建新文档。但要实现这一点,我需要将时间字段作为动态字段进行过滤,在每个文档上更改其循环内部
  • @Michael 我确实用 Bulk 修复了它。如果你把它作为一个帖子,我会将它设置为答案
  • @DutchKevv 不客气

标签: mongodb mongoose


【解决方案1】:

你应该使用 Mongo 的Bulk API

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2014-03-09
    相关资源
    最近更新 更多