mongodb - 如何根据数组是否包含pymongo中的特定元素来更新所有文档?
问题描述
我一直在尝试这个:
self.followersDbRef.update({'followersList':{'$elemMatch':{'$eq':userID}}},{'$addToSet':{'feed':postDict},'$set':{'_id':userID}},multi=True,upsert=True)
但无济于事。而是完全创建另一个文档。
应该这样,每当我添加帖子时,所有其他关注我的用户都会将帖子复制到他们的提要中。
解决方案
在 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
.
推荐阅读
- sql - SQL 中的数据透视语法错误,为什么我得到不正确的结果?
- angular - 无法通过rest api下载csv文件
- android - 在 Kaspresso 中比较两个 VectorDrawables 失败 - Android
- reactjs - 如何从组件调用状态到页面?
- iphone - 如何在不使用 App Store 的情况下将我的 Flutter 应用程序下载到我的 iPhone 上?
- flutter - 函数返回未来
- java - 从给定的字符和长度生成所有可能的组合(单词表)
- json - JSON 反序列化为 List
- reactjs - 如何使用 React 和 Django REST 框架以理想的方式(两种方式)获取和发布数据(序列化)
- python - 如何获得一个函数来返回 python 中表的每一行?