使用 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 将子文档作为列表更新插入的主要内容,如果未能解决你的问题,请参考以下文章
如何将子布局插入 QListWidgetItem? [关闭]