【发布时间】: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);
如果不单独循环每个文档,这可能吗??
【问题讨论】:
-
你能澄清一下你想要什么吗?我将其读作“如果时间已经存在,则应更新文档,否则创建新时间”,这让我印象深刻,将所有时间字段设置为新的时间戳,不是吗?
-
我更新了问题。是的,确实是正确的,它是一个文档数组,索引键在某种程度上是唯一的时间戳。因此,如果一个文档来自已经存在的时间戳,则应该更新该文档,否则创建新文档。但要实现这一点,我需要将时间字段作为动态字段进行过滤,在每个文档上更改其循环内部
-
我认为你应该使用
BulkAPI:docs.mongodb.com/manual/reference/method/Bulk.find.upsert -
@Michael 我确实用 Bulk 修复了它。如果你把它作为一个帖子,我会将它设置为答案
-
@DutchKevv 不客气