【问题标题】: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)

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

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

【问题讨论】:

    标签: mongodb nosql pymongo


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-24
      • 2021-09-15
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 2014-05-18
      相关资源
      最近更新 更多