python - 是否可以在 mongodb 中使用通配符作为字段名称?
问题描述
我有一组字段名称如下:
"field0.registers.hilo"
"field0.registers.lllo"
...
"field1.registers.hilo"
"field1.registers.lllo"
...
"field2.registers.hilo"
"field2.registers.lllo"
...
"fieldn.registers.hilo"
"fieldn.registers.lllo"
...
有没有一种方法可以简洁地指示 mongodb 中的字段,索引范围从0到n,而无需事先将其全部展开?
像这个项目的例子:
{ $project: { "fieldn.registers.hilo": 1, "fieldn.registers.lllo": 1 } }
现在,在使用 pymongo 与集合交互之前,我将在 python 中将所有项目字段从0完全扩展为n 。
解决方案
是否可以在 mongodb 中使用通配符作为字段名称?
不。
如果您的数据在此结构中,请将其重构为使用列表。这正是列表的设计目的。
以下面的重构示例为例,用于$elemMatch
仅投影所需的数组元素:
from pymongo import MongoClient
db = MongoClient()['mydatabase']
db.register.insert_many([{
'registers': [
{
'field': 0,
'hilo': 1,
'lllo': 2
},
{
'field': 1,
'hilo': 2,
'lllo': 3
},
{
'field': 2,
'hilo': 3,
'lllo': 4
}
]}])
print(db.register.find_one({}, {'registers': {'$elemMatch': {'field': 1}}}))
印刷:
{'_id': ObjectId('60b64e57c3214d73c390557b'), 'registers': [{'field': 1, 'hilo': 2, 'lllo': 3}]}
推荐阅读
- python - Bs4错误可能来自错误的pip安装位置,我解决了但不是以pythonic方式
- php - Laravel 将聚合与另一个表中的值进行比较
- php - 服务器损坏文档上的 PHPWord 缺少提及某些部分
- javascript - 使用函数设置对象的值
- c - 如何在 C 中使用 rand() 函数生成 16 位随机数?
- jupyter-notebook - 如何使用 Python QuTip 实现这个哈密顿量?
- pandas - TypeError:重载函数“new_Date”的参数数量或类型错误
- javascript - 在 Google App 脚本中根据条件禁用按钮
- kotlin - 访问为 Textrecognizer 创建的变量
- android - FCM 在 Android 通知中不显示正文