MongodbでのDocumentsのサブセットフィルタ


MongDBは、独自のBSONでJSON形式のデータを格納できるオープンソースのドキュメント型データベースです.データベースにdocumentsとして格納されるため、docサブセットのサブセットをクエリーするなど、CRUDを最初に行うときに使用するのは面倒です.しばらくの探索と努力を経て、aggregate法を通じて、その柔軟性と拡張性を完全に体現していることが分かった.
次に、クエリの例を示します.
次の図では、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.