【问题标题】:fetch documents from mongodb collection by querying nested dictionary in mongo通过查询 mongo 中的嵌套字典从 mongodb 集合中获取文档
【发布时间】:2013-07-06 02:57:24
【问题描述】:

我有一个包含架构的集合

{user_id:user id, user_details: {name: {age: {profession: {salary: amount}}}}}

示例条目是:

{user_id:001, user_details: {
                             abc:{21:{teacher:{salary:10000}, 
                                      book-seller:{salary:10000}}, 
                                  34:{farmer:{salary:5000}}}, 
                             xyz:{40:{manager:{salary:200000},
                                      asst_manager:{salary:198900}}}
                            }
}
{user_id:002, user_details: {
                             abc:{19:{student:{salary:1000}, 
                                      book-seller:{salary:10000}}, 
                                  34:{farmer:{salary:5000}}}, 
                             xyz:{45:{manager:{salary:200000},
                                      asst_manager:{salary:198900}}}
                            }

}

有没有办法查询所有用户名为'abc'的文档?

【问题讨论】:

  • 是的,但是您的架构将很难查询和更新。不要使用文档字段名称来包含非静态数据,这就是值的用途。
  • @its-me,此示例文档完全不可读且无效
  • @JohnnyHK 我无法更改架构,此架构目前在我们项目的许多地方都在使用。您能否确认我没有直接的方法可以找到特定用户的所有文档姓名?
  • 如果您可以更改架构,请执行此操作。 @JohnnyHK 是对的:密钥应该来自您的应用程序。价值观可以来自外部世界。

标签: python mongodb pymongo


【解决方案1】:

使用 pymongo:

key = 'user_details.{username}'.format(username='abc')
db.collections.find({key: {'$exists': True}})

这使用$exists 运算符根据键进行查找。

您必须为每个用户名动态生成“key”变量。

【讨论】:

  • 它为用户 abc 提供所有文档,但它返回完整的文档,而不仅仅是包含用户 abc 的子文档。感谢您的帮助!
【解决方案2】:

您可以使用 $exists 运算符和点符号来执行此操作,但您需要像这样(在 shell 中)动态构建查询:

var user = 'abc';
var query = {};
query['user_details.' + user] = { $exists: true };
db.coll.find(query);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2019-11-11
    • 2018-11-30
    • 2018-03-09
    • 1970-01-01
    • 2016-11-26
    相关资源
    最近更新 更多