低级嵌套字段优于Mongodb Projection中的顶级嵌套字段

时间:2017-08-23 07:09:49

标签: mongodb mongodb-query

我在“testProjection”集合中插入了以下数据。

{
    "eventname" : "Ball Passed",
    "command" : {
        "name" : "Run",
        "strike" : 15,
        "score" : true,
        "duration" : 123
    }
},
{
    "eventname" : "Ball Passed",
    "command" : {
        "name" : "Run",
        "strike" : 12,
        "score" : false,
        "duration" : 597
    }
}

我的查询是:

db.testProjection.find({},{"command":0,"command.score":0})

Actaul结果:

{
    "_id" : ObjectId("599d27944be6e513549dd170"),
    "eventname" : "Ball Passed",
    "command" : {
        "name" : "Run",
        "strike" : 15.0,
        "duration" : 123.0
    }
},
{
    "_id" : ObjectId("599d27944be6e513549dd171"),
    "eventname" : "Ball Passed",
    "command" : {
        "name" : "Run",
        "strike" : 12.0,
        "duration" : 597.0
    }
}

预期结果:

{
    "_id" : ObjectId("599d27944be6e513549dd170"),
    "eventname" : "Ball Passed"
},
{
    "_id" : ObjectId("599d27944be6e513549dd171"),
    "eventname" : "Ball Passed"
}

在mongodb投影中,Mongodb中的查询引擎更喜欢嵌套的低级投影而不是顶级投影。

这是mongodb中的理想行为吗?有没有办法用mongodb查询实现我的预期?

1 个答案:

答案 0 :(得分:1)

  

有没有办法实现我使用MongoDb查询的预期?

您可以包含您期望的字段,而不是排除字段,如:

db.testProjection.find(
    {},
    {
        _id: 1,
        eventname: 1
    }
);

但我认为最好使用这样的聚合 - 作为性能问题 - :

db.testProjection.aggregate(
    [
        {
            $project: {
                _id : 1,
                eventname: 1
            }
        },
    ]
);