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
.
我一直在尝试这个:
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
.