Что такое инклюзивный режим в структуре агрегации монго?

Я играю с фреймворком агрегации монго и совсем не могу понять некоторые термины. В частности, в некоторых примерах ссылка $project находится в «инклюзивном режиме». Я также слышал, что _id выбирается «неявно» в связанных контекстах. Кто-нибудь может прояснить?

http://docs.mongodb.org/manual/reference/aggregation/project/

db.article.aggregate(
    { $project : {
        title : 1 ,
        stats : {
            pv : "$pageViews",
            foo : "$other.foo",
            dpv : { $add:["$pageViews", 10] }
        }
    }}
);


This projection includes the title field and places $project into “inclusive” mode. Then, it creates the stats documents with the following fields:

person Community    schedule 24.06.2013    source источник


Ответы (1)


_id выбран "неявно"

Когда вы делаете проекции, вы должны явно указать все поля:

> db.a.find()
{ "_id" : ObjectId("51c8744a1c0a41d783d77431"), "a" : 1, "b" : 2, "c" : 3 }
> db.a.aggregate({$project:{a:1}})
{
    "result" : [
        {
            "_id" : ObjectId("51c8744a1c0a41d783d77431"),
            "a" : 1
        }
    ],
    "ok" : 1
}

Здесь вы включаете только «а» в результирующий документ, все остальные поля были удалены. Единственным отличием является поле _id, которое всегда включено, но вы можете явно отключить его:

> db.a.aggregate({$project:{a:1, _id:0}})
{ "result" : [ { "a" : 1 } ], "ok" : 1 }

$project находится в «инклюзивном режиме»

Это просто: если вы хотите, чтобы какое-то поле было включено в результирующий документ как есть, вы можете просто ввести что-то вроде {a:1}, это просто сокращение для того, чтобы сказать {a:'$a'}

person Artem Mezhenin    schedule 24.06.2013