我有一个蒙戈集合包含多个文档,假设下面的(假设汤姆两位老师对历史在2012年无论何种原因)
{
"name" : "Tom"
"year" : 2012
"class" : "History"
"Teacher" : "Forester"
}
{
"name" : "Tom"
"year" : 2011
"class" : "Math"
"Teacher" : "Sumpra"
}
{
"name" : "Tom",
"year" : 2012,
"class" : "History",
"Teacher" : "Reiser"
}
我希望能够查询所有“汤姆”曾经有不同的类别,即使汤姆已经有多个“历史”类有多个老师,我只是想查询得到的最小数量的文档,使得汤姆在所有这些,与“历史”显示了一个时间,而不是具有包含“历史”重复多个文档的查询结果。
我在接过来一看: http://mongoengine-odm.readthedocs.org/en/latest/guide/querying.html
并希望能够尝试喜欢的东西:
student_users = Students.objects(name = "Tom", class = "some way to say distinct?")
虽然它似乎没有被记录在案。 如果不这样做的语法正确的方式,这可能在mongoengine,或者是有一些方法来实现与像pymongo一些其他图书馆? 或者我要查询与汤姆的所有文件,然后做一些后期处理来获得独特的价值? 语法,将不胜感激的任何情况。
首先,它只是尽可能在MongoDB的文档中解释得到了一些领域(只有一个字段)的不同值鲜明 。
Mongoengine的QuerySet
类不支持不同()方法来完成这项工作。
所以,你可以尝试这样的事情,得到的结果:
Students.objects(name="Tom").distinct(field="class")
这个查询结果包含的类汤姆参加列表中的一个BSON-文件内。
该返回值注意注意是一个单一的文件,所以如果超过最大文件大小(16 MB),你会得到错误,你必须切换到地图的话/减少的方法来解决这样那样的问题。
import pymongo
posts = pymongo.MongoClient('localhost', 27017)['db']['colection']
res = posts.find({ "geography": { "$regex": '/europe/', "$options": 'i'}}).distinct('geography')
print type(res)
res.sort()
for line in res:
print line
参考http://docs.mongodb.org/manual/reference/method/db.collection.distinct/不同返回一个列表,将在打印类型(RES)进行打印,你可以整理与res.sort列表()之后,它会打印排序列表的值。
您还可以查询职位之前选择不同的值。
student_users = Students.objects(name = "Tom").distinct('class')