-->

如何查询MongoDB中不同的结果与蟒蛇?(How to query for distinct re

2019-06-27 03:23发布

我有一个蒙戈集合包含多个文档,假设下面的(假设汤姆两位老师对历史在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一些其他图书馆? 或者我要查询与汤姆的所有文件,然后做一些后期处理来获得独特的价值? 语法,将不胜感激的任何情况。

Answer 1:

首先,它只是尽可能在MongoDB的文档中解释得到了一些领域(只有一个字段)的不同值鲜明 。

Mongoengine的QuerySet类不支持不同()方法来完成这项工作。

所以,你可以尝试这样的事情,得到的结果:

Students.objects(name="Tom").distinct(field="class")

这个查询结果包含的类汤姆参加列表中的一个BSON-文件内。

该返回值注意注意是一个单一的文件,所以如果超过最大文件大小(16 MB),你会得到错误,你必须切换到地图的话/减少的方法来解决这样那样的问题。



Answer 2:

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列表()之后,它会打印排序列表的值。

您还可以查询职位之前选择不同的值。



Answer 3:

student_users = Students.objects(name = "Tom").distinct('class')


文章来源: How to query for distinct results in mongodb with python?