首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MongoDB/pyMongo使字段路径包含同一文档中的值?

如何使用MongoDB/pyMongo使字段路径包含同一文档中的值?
EN

Stack Overflow用户
提问于 2021-01-02 21:47:26
回答 1查看 28关注 0票数 0

例如,我查询的MongoDB中的文档可以简化为以下内容:

代码语言:javascript
复制
{
    "date":"2019-08-15",
    "status":"5345",
    "foo":
    {
        "bar":
        {
            "years":
            {
                "2018":
                {
                    "const":1234
                },
                "2019":
                {
                    "const":4321
                }
            }
        }
    }
}

我正在尝试使用pyMongo从这个文档中获取"const“值。

“年份”中的关键字随文档的“日期”而变化。

我尝试使用此管道,尝试使用年份"date“从今年获取"const”:

代码语言:javascript
复制
pipeline=[
    {'$match':{'status':{'$exists': True}}},
    {'$project':
        'const_thisYear':{
            '$let':{
                'vars':{
                    'yr':{ '$year': {'$convert':{'input': '$date','to': 'date'}}},
                    'res': '$foo.bar.years'
                },
                'in': '$$res.$$yr.const'
            }
        }
    }
]

在聚合时,我得到以下python异常:

代码语言:javascript
复制
OperationFailure: FieldPath field names may not start with '$'.

我怎样才能正确地做到这一点?

Python 3.7.7

EN

回答 1

Stack Overflow用户

发布于 2021-01-03 00:03:02

您应该修改您的集合结构,使其不以键的形式存储数据;但不管怎样,只要使用常规的python dict操作就可以让您走出困境:

代码语言:javascript
复制
for doc in db.mycollection.find({'status': {'$exists': True}}, {'foo.bar.years': 1}):
    for year, year_value in doc['foo']['bar']['years'].items():
        print(year, year_value.get('const'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65539776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档