Python和mongodb选择

时间:2012-12-03 15:07:45

标签: mongodb nosql

我在mongodb中有以下文件:

{ "_id" : { "$oid" : "50bc8c38cb5ecd32fb8d12d3"} , "p" : 0 , "d" : <Binary Data> , "kid" : 6384}
{ "_id" : { "$oid" : "s6bc8c3phg5ecd32bbgd12f3"} , "p" : 1 , "d" : <Binary Data> , "kid" : 6384}
{ "_id" : { "$oid" : "k7bc8kf8vg5echy2bbgd12m5"} , "p" : 1 , "d" : <Binary Data> , "kid" : 6385}
 { "_id" : { "$oid" : "k7bc8kf8vg5echy2bbgd12m5"} , "p" : 1 , "d" : <Binary Data> , "kid" : 6386}

我想查询数据库以仅返回具有相同孩子但不同p的那些数据库。对于每个孩子,如果存在,则应该返回2行。

在示例中,结果应为:

{ "_id" : { "$oid" : "50bc8c38cb5ecd32fb8d12d3"} , "p" : 0 , "d" : <Binary Data> , "kid" : 6384}
{ "_id" : { "$oid" : "s6bc8c3phg5ecd32bbgd12f3"} , "p" : 1 , "d" : <Binary Data> , "kid" : 6384}

这可能吗?

2 个答案:

答案 0 :(得分:0)

您需要进行两次查询或对客户端进行排序。

答案 1 :(得分:0)

您可以将聚合方法

用作两个查询之一
db.myTable.aggregate( [ { '$group': { '_id': "$kid", 'count': { '$sum': 1 } } }, 
                        { '$match': { 'count': { '$gt': 1 } } } ] )['result'] 

应该会为您提供一个有多个父母的孩子的列表

[{u'count': 2, u'_id': 6384}]

然后,你可以找到那些孩子。