想象一下,我有一个名为user的集合,具有以下字段 - 名称 -家庭 -年龄
我想创建一个视图以返回所有19岁和21岁的用户
答案 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/