首页 > 解决方案 > 如何根据数组是否包含pymongo中的特定元素来更新所有文档?

问题描述

我一直在尝试这个:

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

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

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

标签: mongodbnosqlpymongo

解决方案


在 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.


推荐阅读