mongodb empty是通配符但只在顶级?

时间:2011-12-30 17:42:49

标签: mongodb nosql

对于那些不喜欢Python的人,我的样本使用pymongo。

在mongodb中,空白被用作“通配符”,就像这里一样(使用“通配符”我得到相同或更多的结果):

>>> projects.find_one({'name': 'boodo3', '_id': ObjectId('4efa14c6b0ab584326000000')})
{u'_id': ObjectId('4efa14c6b0ab584326000000'), u'name': u'boodo3', u'updated_at': u'2011-12-28 13:47:09'}
>>> projects.find_one({'name': 'boodo3'})
{u'_id': ObjectId('4efa14c6b0ab584326000000'), u'name': u'boodo3', u'updated_at': u'2011-12-28 13:47:09'}

但如果我在文档的“内部”查询,则通配符不再像以下示例那样工作:

>>> testruns.find_one({'_parent': {'_coll': u'projects', '_id': '4efa14c6b0ab584326000000'}})
{u'_parent': {u'_coll': u'projects', u'_id': u'4efa14c6b0ab584326000000'}, u'_id': ObjectId('4efa167eb0ab584351000002'), u'name': u'11121617', u'updated_at': u'2011-12-27 19:03:26'}
>>> testruns.find_one({'_parent': {'_coll': u'projects'}})
>>> <no results here>

我尝试使用'$ in'和'$ nin'进行变换,但到目前为止没有运气。我希望有一些查询文档的结构化方法(我的意思是除了正则表达式之外)。如果有必要,我会重新构建我的收藏品,但我认为平面文件不是解决方案。

这是否意味着我必须将所有查询翻译成点符号? 或者是正则表达式在mongodb中查询文档的方式?

免责声明:我不打算批评mongodb或其他任何东西。这是我的第一个使用mongodb的应用程序,我想学习如何在mongodb中查询文档。

2 个答案:

答案 0 :(得分:4)

此查询: testruns.find_one({'_parent': {'_coll': u'projects'}}) 正在查找_parent等于{'_coll': u'projects'}且没有任何匹配的文档,因为文档中还包含其他键,因此不满足相等性 - 这里没有“通配符”的概念。尝试这样的查询:

testruns.find_one({'_parent._coll': u'projects'})

答案 1 :(得分:0)

请更新标题,因为问题本身不正确。

“如何在mongodb中搜索嵌套文档条件” ,它是重复项:

How to correctly query a MongoDB nested document with python?

这在mongodb文档中也得到了回答:

https://docs.mongodb.com/manual/tutorial/query-embedded-documents/

在“指定嵌套字段上的相等匹配”下