MongodbでのDocumentsのサブセットフィルタ
MongDBは、独自のBSONでJSON形式のデータを格納できるオープンソースのドキュメント型データベースです.データベースにdocumentsとして格納されるため、docサブセットのサブセットをクエリーするなど、CRUDを最初に行うときに使用するのは面倒です.しばらくの探索と努力を経て、aggregate法を通じて、その柔軟性と拡張性を完全に体現していることが分かった.
次に、クエリの例を示します.
次の図では、collectionに複雑なdocumentが含まれています.
次に、クエリの例を示します.
次の図では、collectionに複雑なdocumentが含まれています.
document={
"_id" : ObjectId("58046aee430e9c11109c3de2"),
"texts" : [
{
"time" : "2016-10-17-14-00",
"number" : "12345678988",
"name" : "",
"io" : 0.0
},
{
"time" : "2016-10-17-14-00",
"number" : "12345678988",
"name" : "",
"io" : 0.0
},
{
"time" : "2016-10-17-14-00",
"number" : "12345678988",
"name" : "",
"io" : 0.0
},
{
"time" : "2016-10-17-14-00",
"number" : "12345678988",
"name" : "",
"io" : 0.0
}
],
"calls" : [
{
"time" : "2016-10-17-14-00",
"number" : "12345678988",
"name" : "",
"io" : 1.0,
"duration" : 60.0
},
{
"time" : "2016-10-17-14-00",
"number" : "12345678988",
"io" : 1.0,
"duration" : 60.0
}
]
}
document field value , list。 MongoDB find() , aggregate project ,unwind :
info = document.aggregate([
{"$project": {
data['type']:{
"$filter":{
"input": "$" + data['type'],
"as": "item",
"cond": {"$and":[
{"$lte": ["$$item.time", end]},
{"$gte": ["$$item.time", start]}
]}
}
}
}},
{"$unwind": "$" + data['type']},
{"$project": type_format(data['type'])}
])
def type_format(type):
r = {"_id": 0}
for k in document[type][0]:
r[k] = '$' + type + '.' + k
return r
data['type'] field。
MongoDB aggregate pipeline , doc , 。
,
1、 project field filter values , ;
2、 unwind context( document)
3、 project list 。
Over.