pymongo如何根据数组是否包含特定元素来更新所有文档?

How to update all documents based on whether an array contains a specific element in pymongo?

我一直在尝试这个:

self.followersDbRef.update({'followersList':{'$elemMatch':{'$eq':userID}}},{'$addToSet':{'feed':postDict},'$set':{'_id':userID}},multi=True,upsert=True)

但无济于事。 而是完全创建了另一个文档。

应该这样,每当我添加 post 时,所有其他关注我的用户都会将 post 复制到他们的供稿中。

在 mongoDB 中,基本查询 { key: "value" } 匹配完全匹配和数组内匹配。因此,如果您的数据如下所示:

{"key": "a"},
{"key": ["a", "b"]}

那么下面的查询将匹配两个文档:

db.collection.find({"key": "a"})

考虑到这一点,这可能就是您要找的东西:

self.followersDbRef.update(
  {'followersList': userID},
  {'$addToSet': {'feed':postDict},'$set':{'_id':userID}},
  multi=True,
  upsert=True
)

另请注意,upsert 表示如果未找到匹配项,将插入一个文档。如果您不希望这种情况发生,您可以删除 upsert=True 或将其更改为 False.