我正在使用pymongo 3.5。以下查询抛出异常,告诉我BSON文档超过了16mb的限制。 但是怎么可能呢? 我已经使用“$ out”选项将结果写入集合而不是返回值。
c.get('endDate').setErrors(null)
Here说在管道处理过程中,文档可能超过这个大小。
预期结果的一个例子是:
pipeline = [
{"$match": match_dict},
{"$unwind": "$fields"},
{"$match": {
field_types[field_type]:field
}},
{ "$group": {
"_id": "$fields.value",
"count" : {"$sum" : 1},
"unique_ids" : {"$addToSet" : {"doc":"$_id","items":"$items"}},
}},
{"$unwind": "$unique_ids"},
{ "$group": {
"_id": {"value":"$_id","count":"$count"},
"items_sum" : {"$sum" : "$unique_ids.items"}
}},
{ "$project" : {
"_id": {"value":"$_id.value"},
"count" : "$_id.count",
"items_sum" : "$items_sum"
}},
{"$out": collection_name}
]
db.records.aggregate(pipeline,allowDiskUse=True)
数据结构:
[{"count": 79293, "_id": {"value": "06101"}, "items_sum": 111700},
{"count": 47352, "_id": {"value": "06120"},...]
{
"_id": <the_doc_id>
"items": 30,
"fields": [
{
"marc_field_subfield": "008",
"value": "150504s2010 gr abe r 000 0 gre|c"
},
{
"marc_field_subfield": "020a",
"value": "9789604751235"
},
{
"marc_field_subfield": "020q"
"value": "(\u03c7\u03b1\u03c1\u03c4\u03cc\u03b4.)"
},
{
"marc_field_subfield": "040a"
"value": "GR-KeIUL"
},
{
"marc_field_subfield": "040a"
"value": "EL"
}
]
}
匹配特定的field_types[field_type]:field
,它可以在字段数组中存在多次(例如“040a”)