我生成三元组片段作为主键。字段words是由trigram键表示的术语数组,例如:

{
    "trigram": "#ha",
    "words": ["hahaha", "harley", "mahalo"]
}

问题是将新的术语推到数组中。我不知道怎么用$addToSet来做这个。
db["Terms"].update({
  "trigram": trigram,
  {"$addToSet": {"words":word}
})

它应该将word附加到words字段。但是数据库仍然是空的,没有返回任何错误消息。
我该怎么办?

最佳答案

除非使用upsert选项,update将只修改现有文档,而不是创建它们。请改为:

db["Terms"].update(
  { "trigram":trigram },
  { "$addToSet":{"words":word} },
  upsert=True)

通过使用upsert选项,如果缺少文档,它将创建文档,否则只需更新现有的文档。

10-02 12:58