使用 mutate_in 将子文档作为列表更新插入

Posted

技术标签:

【中文标题】使用 mutate_in 将子文档作为列表更新插入【英文标题】:Upserting subdocumets as a list with mutate_in 【发布时间】:2020-10-14 05:00:19 【问题描述】:

非常感谢您的帮助。

我正在尝试通过使用 mutate_in 来改变子文档,然后为要放入的每个元素定义带有路径的 SD。 代码如下所示:

cb.mutate_in(‘1_2’,
SD.upsert(
‘strat.a’, 76543, create_parents=True),
SD.upsert(
‘strat.b’, “true”, create_parents=True),
SD.upsert(
‘strat.c’, 30, create_parents=True),
SD.upsert(
‘strat.d’, -25, create_parents=True),
SD.upsert(
‘strat.e’, “C”, create_parents=True),
SD.upsert(
‘strat.f’, 7, create_parents=True),
)

这是它带来的结果:


“strat”: 
“a”: 76543,
“b”: “true”,
“c”: 30,
“d”: -25,
“e”: “C”,
“f”: 7



我正在寻找的是这个(注意我在这里把它放在一个列表中):


“Strat”: [

“a”: “12345”,
“b”: 7,
“c”: “C”,
“d”: “true”,
“e”: -25,
“f”: 25

]


一旦我能够以列表的形式实现上述目标,我应该能够像这样生成多个子文档:

请注意,现在我在此列表中有 2 个元素具有不同的值:


“Strat”: [

“a”: “12345”,
“b”: 7,
“c”: “C”,
“d”: “true”,
“e”: -25,
“f”: 25
,

“a”: “34567”,
“b”: 8,
“c”: “F”,
“d”: “false”,
“e”: -30,
“f”: 40

]


问题:

can I achieve this with mutate_in and SD.upsert ?
if so, how can I change that code I have provided at the beginning of this thread to put things in a list
Once I can put it as a list, how can I avoid upsert not overwriting the record but to attach another record in that list?

我们非常感谢您的帮助。谢谢!

期待所有沙发专家的指导

【问题讨论】:

你在使用 Couchbase Python SDK 吗? 是的,我正在使用 Couchbase Python sdk 【参考方案1】:

您可以创建一个表示新 JSON 对象的 Python 字典,并将其附加到数组中(create_parents=True 表示“如果数组尚不存在则创建数组”)。

我不精通 Python,不知道这是否可以编译...所以我们称它为伪代码 :-)

cb.mutate_in(‘1_2’,
    SD.array_append('strat',
        
            "a": "12345",
            "b": 7,
            "c": "C",
            "d": "true",
            "e": -25,
            "f": 25
        ,
        create_parents=True),
   
    SD.array_append('strat',
        
            // some other values...
        ,
        create_parents=True));

通过这种方式,您一次最多可以附加 16 个项目(子文档批次限制为 16 个操作)。

【讨论】:

以上是关于使用 mutate_in 将子文档作为列表更新插入的主要内容,如果未能解决你的问题,请参考以下文章

如何将子文档插入 mongo 集合?

如何将子布局插入 QListWidgetItem? [关闭]

MongoDB将子文档作为数组返回

完整性约束违规:1452 无法将子行添加或更新到我的数据库中

在选择选项更改时将子组件中的道具传递给父组件

如何在 MongoDB 中查找文档、更新文档并插入新文档?