首页 > 解决方案 > 是否可以在 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 中的字段,索引范围从0n,而无需事先将其全部展开?

像这个项目的例子:

{ $project: { "fieldn.registers.hilo": 1, "fieldn.registers.lllo": 1 } }

现在,在使用 pymongo 与集合交互之前,我将在 python 中将所有项目字段从0完全扩展为n 。

标签: pythonmongodbaggregation

解决方案


是否可以在 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}]}

推荐阅读