例如..在Mongodb ..
> db.test.findOne({}, {'mapField.FREE':1})
{
"_id" : ObjectId("4fb7b248c450190a2000006a"),
"mapField" : {
"BOXFLUX" : {
"a" : "f",
}
}
}
'mapField'字段由Mongoengine的MapField组成。 'mapField'字段有一个键和数据的日志..但我只检索'BOXFLUX'..
这个查询在MongoEngine中不起作用.... 例如......
BoxfluxDocument.objects( ~~ querying ~~ ).only('mapField.BOXFLUX')
你可以看到.. only('mapField.BOXFLUX')或仅 only('mapField__BOXFLUX')不起作用。 它检索所有'mapField'数据,包括'BOXFLUX'一个..
如何只检索MapField的字段???
答案 0 :(得分:5)
我看到有一张票:https://github.com/hmarr/mongoengine/issues/508
为我工作的是一个示例测试用例:
def test_only_with_mapfields(self):
class BlogPost(Document):
content = StringField()
author = MapField(field=StringField())
BlogPost.drop_collection()
post = BlogPost(content='Had a good coffee today...',
author={'name': "Ross", "age": "20"}).save()
obj = BlogPost.objects.only('author__name',).get()
self.assertEquals(obj.author['name'], "Ross")
self.assertEquals(obj.author.get("age", None), None)
答案 1 :(得分:3)
试试这个:
query = BlogPost.objects({your: query})
if name:
query = query.only('author__'+name)
else:
query = query.only('author')
答案 2 :(得分:1)
一如既往,罗斯真的非常感谢!!!!!!!!!
我发现了我的错......就是......我只使用了'两次'..
例如,
BlogPost.objects.only('author').only('author__name')
像这样......
我花了一整天的时间来发现Mongoengine的问题..
所以..我的愚蠢结论是......
BlogPost.objects()._collection.find_one(~~ filtering query ~~, {'author.'+ name:1})
像这样......
但是你知道它只是一个原始数据而不是mongoengine查询..
在这段代码之后,我无法运行任何mongoengine方法......
反正..
在我的情况下,我应该根据某些条件进行查询。
因此,“仅”方法会覆盖以前编写的“仅”方法,这将是很棒的。在我的拙见中。
我希望此功能可以与下一版本集成。
现在,我必须编写重复的代码..例如..
不是这段代码......
query = BlogPost.objects()
query( query~~).only('author')
if name:
query = query.only('author__'+name)
此代码
query = BlogPost.objects()
query( query~~).only('author')
if name:
query = BlogPost.objects().only('author__'+name)
所以......我想..第二个看起来比第一个更脏。
当然,第一个代码会显示所有数据 使用“only('author')”not only only('author__name')
非常感谢!!!!!!!!!
罗斯,你救了我!!!谢谢..(我以为Mongoengine不能简单地做那些查询。)