使用$ match将空查询传递给mongoDB

时间:2017-05-05 16:17:59

标签: mongodb aggregation-framework

我有一个数据集,我试图创建动态查询。这是数据集的一个示例。

db.test.insert({
    "_id" : ObjectId("58e574a768afb6085ec3a388"),
    "place": "A",
    "tests" : [
        {
            "name" : "1",
            "evaluation" : [
                {
                    "aHigh" : [1,2],
                    "aLow" : [ ],
                    "zHigh" : [ ],
                    "zLow" : [1,3]
                },
                {
                    "aHigh" : [1,4],
                    "aLow" : [2],
                    "zHigh" : [ 3],
                    "zLow" : [ ]
                },
                {
                    "aHigh" : [ ],
                    "aLow" : [1,2,3],
                    "zHigh" : [1,2,3,4],
                    "zLow" : [ ]
                },]
            }
            ]
        })
db.test.insert({
    "_id" : ObjectId("58eba09e51f7f631dd24aa1c"),
    "place": "B",
    "tests" : [
        {
            "name" : "2",
            "evaluation" : [
                {
                    "aHigh" : [2],
                    "aLow" : [3 ],
                    "zHigh" : [ ],
                    "zLow" : [1,2,3,4]
                },
                {
                    "aHigh" : [ ],
                    "aLow" : [ ],
                    "zHigh" : [ ],
                    "zLow" : [3,4]
                },
                {
                    "aHigh" : [1,2],
                    "aLow" : [3,4],
                    "zHigh" : [ ],
                    "zLow" : [1,2,3,4]
                },]
            }
            ]
        })

总体设置使用nodejsangularjs,但该问题仅适用于mongoDB。我有一组选择器框,其中填充了每个特定字段中包含的值。例如,"place"有一个包含值"A""B"的选择器。

搜索框的默认行为是它们具有占位符,并且没有选定的数据传递给模型。这意味着当我使用模型的输出将加载查询传递给mongoDB时,我实际上传递了{}。但是,当我在搜索框中进行选择时,它会传递一个值。

在我的mongoDB查询中,我必须使用aggregate(出于超出问题范围的原因),因此我必须使用$match。这是一些示例代码。

db.test.aggregate([
    { $match: { place: {$in: [ <whateverQuery> ]}}},
    { $unwind: "$tests"},
    { $sortByCount: "$tests.name"}
])

预期输出如下:

{ "_id" : "1", "count" : 1 }
{ "_id" : "2", "count" : 1 }

如何修改我的方法,以便不向查询传递任何内容?

0 个答案:

没有答案