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

Posted

技术标签:

【中文标题】如何根据数组是不是包含pymongo中的特定元素来更新所有文档?【英文标题】:How to update all documents based on whether an array contains a specific element in pymongo?如何根据数组是否包含pymongo中的特定元素来更新所有文档? 【发布时间】:2021-01-24 11:10:04 【问题描述】:

我一直在尝试这个:

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

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

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

【问题讨论】:

【参考方案1】:

在 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

【讨论】:

以上是关于如何根据数组是不是包含pymongo中的特定元素来更新所有文档?的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素

Julia:如何根据具有特定值的类型字段访问类型数组中的元素

如何根据父元素是不是具有特定类来设置 vue 组件属性?

JS中如何判断数组中是不是包含某一元素

php检查数组中的特定值是不是包含大于0的值[重复]

如何对包含null元素的对象数组进行排序?