【问题标题】:how to search through a mongodb collection for dictionary keys nested in array如何在 mongodb 集合中搜索嵌套在数组中的字典键
【发布时间】:2013-12-19 05:01:34
【问题描述】:

我在 mongodb 数据库集合中有一些数据(我知道哪个集合,所以我只查看集合),文档如下所示:

{ "_id" : ObjectId("52a93577dadf672b96062729"), 
  "owner" : "user1", 
  "files" : [  
              {  "IyzkmGh4YGD61Tc3TJjaEY17hDldH" : "rws" } 
            ] 
}
{ "_id" : ObjectId("52a92f43dadf672b96062725"), 
  "owner" : "user2", 
  "files" : [    
              {       "tUI7RtvpHZklptvHVYssamlgHP6xs" : "rws" },
              {       "RsxRDQdXmHgmSLhMJ8tPxILxarruK" : "rws" },    
              {       "IyzkmGh4YGD61Tc3TJjaEY17hDldH" : "rw" },      
              {       "YA4to7HaB5Gm6JuZrwYrFit7IzvgO" : "rws" } 
           ] 
}

我正在想办法找到在文件数组中具有特定字典键的所有文档

如果我使用字符串IyzkmGh4YGD61Tc3TJjaEY17hDldH 搜索示例数据,id 喜欢两个示例以匹配,因为它们的文件列表中都有带有该键的字典,我将如何执行此查询?我正在使用 python 电机访问 mongodb。原因是我想在它们代表的文件不再存在时删除这些条目, 架构由我支配,我可以更改它以使这种搜索更加理智,

【问题讨论】:

    标签: python mongodb


    【解决方案1】:

    您可以在查询键中使用点符号来执行此操作,使用 $exists 运算符来检查是否存在:

    db.test.find({'files.IyzkmGh4YGD61Tc3TJjaEY17hDldH': {'$exists': 1}})
    

    要查找包含这些文件的所有文档并将其删除:

    db.test.update(
        {'files.IyzkmGh4YGD61Tc3TJjaEY17hDldH': {'$exists': 1}},
        {'$pull': {'files': {'IyzkmGh4YGD61Tc3TJjaEY17hDldH': {'$exists': 1}}}},
        multi=True)
    

    【讨论】:

    • 知道如何删除条目吗?我尝试了不同的变体,但它不起作用: db.user_data.update({'projects.IyzkmGh4YGD61Tc3TJjaEY17hDldH': {'$exists': 1}},{ $pull : { 'projects' : 'IyzkmGh4YGD61Tc3TJjaEY17hDldH' }})
    • 太棒了,它起作用了,我不知道我可以用 {'$exists':1} 引用我刚刚找到的文档的值,mongodb 非常酷。这个用例在哪里解释,我在这里找不到这个:docs.mongodb.org/manual/reference/operator/query/exists你当然了解 mongodb
    • @mike 您不是指您刚刚使用$exists 找到的文档的值,您只是使用它来识别$pull 中的元素files,在与您使用它来识别要更新的文档的方式相同。
    猜你喜欢
    • 2011-12-02
    • 2015-10-15
    • 2016-12-16
    • 1970-01-01
    • 2012-05-09
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多