首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pymongo聚合集合键

pymongo聚合集合键
EN

Stack Overflow用户
提问于 2018-06-26 20:25:14
回答 1查看 290关注 0票数 1

在这里使用这个答案https://stackoverflow.com/a/43570730/7626649

我想用烧瓶做这件事。

具体来说,我想在烧瓶中执行以下查询-- pymongo和/或pymongo(如果可以在其中一个完成,那么可以在另一个中完成。我希望):

代码语言:javascript
复制
db.things.aggregate([
  {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}},
  {"$unwind":"$arrayofkeyvalue"},
  {"$group":{"_id":null,"allkeys":{"$addToSet":"$arrayofkeyvalue.k"}}}
])

以下是我迄今所做的工作:

代码语言:javascript
复制
@app.route('/reports/<site>/<system>/<data_type>', methods=['GET'])
def get_keys_for_collection(site, system, data_type):
    pipeline = [
        {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}},   
        {"$unwind":"$arrayofkeyvalue"},
        {"$group":{"_id": None,"allkeys":{"$addToSet":"$arrayofkeyvalue.k"}}}   
    ]
    db, options = get_db_handle(site)
    collection = "%s_%s" % (system, data_type)
    pp.pprint(db.command('aggregate', collection, pipeline=pipeline, explain=True))
    return jsonify({'results': list(db.collection.aggregate(pipeline))})

我已经验证了'db‘是一个活动的烧瓶-Pymongo连接到包含被查询的集合的数据库。下面是db.command()与explain=True的输出:

代码语言:javascript
复制
{   'ok': 1.0,
'stages': [   {   '$cursor': {   'query': {},
                                 'queryPlanner': {   'indexFilterSet': False,
                                                     'namespace': 'MYDB.collection',
                                                     'parsedQuery': {},
                                                     'plannerVersion': 1,
                                                     'rejectedPlans': [],
                                                     'winningPlan': {   'direction': 'forward',
                                                                        'stage': 'COLLSCAN'}}}},
              {   '$project': {   '_id': True,
                                  'arrayofkeyvalue': {   '$objectToArray': [   '$$ROOT']}}},
              {'$unwind': {'path': '$arrayofkeyvalue'}},
              {   '$group': {   '_id': {'$const': None},
                                'allkeys': {   '$addToSet': '$arrayofkeyvalue.k'}}}]}

我省略了实际的数据库和集合名称,并将它们替换为上面的MYDB.collection。db.command()证明了db.connection是一个有效的连接,问题不在于查询的这部分语法。

我得到一个空列表作为结果,没有错误。对URL进行了修改,使其不显示某些信息。请参阅db.command()结果,以证明db连接和集合存在并正在正确连接。

代码语言:javascript
复制
curl http://0.0.0.0:5000/reports/site/system/data_type
{
   "results": []
}

我用的是:

代码语言:javascript
复制
Python 3.6.5
MongoDB shell version v3.6.5
PyMongo v3.4.0
Flask-Pymongo v0.5.2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-11 17:32:09

聚合命令存在语法问题:

代码语言:javascript
复制
db.collection.aggregate(pipeline)

应该是

代码语言:javascript
复制
db[collection].aggregate(pipeline)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51050880

复制
相关文章

相似问题

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