创建MongoDb视图包含find子句

时间:2018-10-25 06:57:46

标签: mongodb

想象一下,我有一个名为user的集合,具有以下字段 - 名称 -家庭 -年龄

我想创建一个视图以返回所有19岁和21岁的用户

2 个答案:

答案 0 :(得分:1)

尝试

db.createView( "viewName", "collection", [
    { $match : { key : value } }
    ,...
    ,...
])

答案 1 :(得分:1)

好吧,我们首先向users集合中添加一些数据,让几个不同年龄的人在一起:

> db.users.insertMany([
...    { "name": "foo", age: 12 },
...    { "name": "bar", age: 19 },
...    { "name": "wibble", age: 20 },
...    { "name": "wobble", age: 21 }
... ]);
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("5bd18277289332325f377fff"),
                ObjectId("5bd18277289332325f378000"),
                ObjectId("5bd18277289332325f378001"),
                ObjectId("5bd18277289332325f378002")
        ]
}

然后我们可以使用createView方法在该集合的顶部编写一个视图,该方法采用了聚合管道:

> var pipelines = [ { "$match" : { "$or" : [ { "age" : 19 }, { "age" :21 } ] } } ];
> db.createView("users19and21", "users", pipelines);
{ "ok" : 1 }

如果要在创建视图之前测试管道,则可以只调用aggregate集合上的users方法,例如:

> var pipelines = [ { "$match" : { "$or" : [ { "age" : 19 }, { "age" :21 } ] } } ];
> db.users.aggregate(pipelines);
{ "_id" : ObjectId("5bd18277289332325f378000"), "name" : "bar", "age" : 19 }
{ "_id" : ObjectId("5bd18277289332325f378002"), "name" : "wobble", "age" : 21 }

一旦有了视图,我们就可以像集合一样查询它:

> db.users19and21.find()
{ "_id" : ObjectId("5bd18277289332325f378000"), "name" : "bar", "age" : 19 }
{ "_id" : ObjectId("5bd18277289332325f378002"), "name" : "wobble", "age" : 21 }

有关在mongodb中创建视图的更多信息,请参见其文档-https://docs.mongodb.com/manual/reference/method/db.createView/