【问题标题】:MongoDB Dot-Notation QueryMongoDB点符号查询
【发布时间】:2011-05-07 08:54:06
【问题描述】:

我是 MongoDB 的新手,我无法让我的点表示法查询正常工作...

我正在使用 pymongo 和在远程 Amazon EC2 实例上运行的 MongoDB...

我没有编写大量 XML 解析代码来提取大量不同的数据,而是将 XML 转换为 JSON,将所有内容转储到 MongoDB,然后尝试使用点符号查询提取我想要的数据片段...

数据被转换成 JSON 并插入到 Mongo 中。我可以看到所有的插入(来自 python shell)...

对于 db.feed.find() 中的项目: 项目

这是一个返回的示例项目...

   {u'timestamp': datetime.datetime(2010, 11, 8, 20, 19, 55, 87000), u'message': u'{"category": {"text": "Scores"}, "XML_File_ID": {"text": "12292403"}, "game": {"status": {"text": "4 Qtr", "attrib": {"numeral": "4", "type": "P"}}, "time_r": {"text": "10:01"}, "vscore": {"text": "27"}, "vteam": {"text": "Pittsburgh", "attrib": {"id": "082"}}, "hteam": {"text": "Cincinnati", "attrib": {"id": "064"}}, "hscore": {"text": "14"}}, "seasontype": {"text": "Regular"}, "schedule_id": {"text": "3151"}, "location": {"city": {"text": "Pittsburgh"}, "state": {"text": "PA"}, "country": {"text": "USA"}}, "time_stamp": {"text": " November 8, 2010, at 11:19 PM ET "}, "game_id": {"text": "3151"}, "sport": {"text": "NFL"}, "heading": {"text": "BC-ABP+082:064* 27 14 4R10:01"}}', u'_id': ObjectId('4cd8cbebe8b5d58527000016')}

所以我正在尝试进行这样的查询,但我没有得到任何结果......

db.feed.find_one({"message.category.text": "Scores"})

执行这些类型的查询并将整个文档返回到响应中的正确方法是什么?谢谢!

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

    您插入的 json 对象有 (u')。这就是问题所在,XML 到 JSON 的转换不正确。

     u'message:u'{category:{text:"scores"}
    

    【讨论】:

      【解决方案2】:

      如果您经常处理关于子文档查询的查询,我建议您研究一下 $elemmatch。

      “使用 $elemMatch 查询运算符 (mongod >= 1.3.1),您可以匹配数组中的整个文档。”

      更多:official docsblog post ...

      【讨论】:

        【解决方案3】:

        我已经在 MongoDB shell 中和使用 pymongo 测试了这些查询,它们对我有用。您是否忘记将结果保存到变量和/或打印它们?

        【讨论】:

        • 谢谢查尔斯,我找到了主要问题,只是飞行员错误。插入消息数据(从 xml 转换为 json)时,在 json“消息”对象周围留下双引号字符,将其呈现为纯文本而不是 json 对象。在 python 方面,我只是做一个 eval(jsonString) 来摆脱插入的双引号......
        • 我注意到的另一件事是,我的点符号查询必须从文档顶部开始完全限定。例如,我希望搜索 {"game_id.text": "3151"},但我需要从 json 文档顶部搜索 {"message.game.game_id.text": "3151"}
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 2016-05-26
        相关资源
        最近更新 更多