代码之家  ›  专栏  ›  技术社区  ›  Ygor Fraga

如何在DOC中插入一个属性,如果它不存在?

  •  1
  • Ygor Fraga  · 技术社区  · 6 年前

    我试图在python上使用bulk将一个名为“users”的属性插入到一个doc中。

    这样地:

        actions = [
            {
                '_op_type': 'update',
                "_index": index,
                "_type": "users",
                "_id": s['id_user'],
                "doc": {
                    "purchases": []
                },
            }
            for i, s in users.iterrows()
        ]
        success, failure = self.db.bulk(actions, stats_only=True)
    

    如果不存在,我怎么才能增加购买呢?我不想在这件事上插手。如果该值已被索引,则禁止更改该值。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Val    6 年前

    您可以尝试使用脚本化的upsert执行此操作,例如:

    actions = [
        {
            '_op_type': 'update',
            "_index": index,
            "_type": "users",
            "_id": s['id_user'],
            "script": {
              "source": "ctx._source.purchases = ctx._source.purchases ?: params.purchases",
              "params": {
                "purchases": []
              }
            },
            "scripted_upsert": true,
            "upsert": {}
        }
        for i, s in users.iterrows()
    ]
    success, failure = self.db.bulk(actions, stats_only=True)
    

    这个 purchases 数组将只与中的数组一起分配 params 如果尚未在源中定义。