六、MongoDB查询语法
MongoDB查询语法
- 1.MongoDB数据类型
- 2.查询
- 2.1 语法格式
- 2.2 查询选择器
- 2.3 查询选择器实战
- in选择器
- exists选择器
- not选择器
- 2.4 映射
- 2.5 排序
- 2.6 跳过或限制
- 2.7 查询唯一值
- 3.字符串数组选择查询
- 3.1 数组单元素查询
- 3.2 数组精确查找
- 3.3 数组多元素查询
- 3.4 索引查询
- 3.5 返回数组子集
- 4.对象数组查询
- 4.1 单元素查询
- 4.2 $in 查找符
- 4.3 $all 操作符
- 4.4 $elemMatch查找符
1.MongoDB数据类型

2.查询
2.1 语法格式
MongoDB 查询数据的语法格式如下:
db.collection.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
注意:0表示字段排除,非0表示字段选择并排除其他字段,所有字段必须设置同样的值;
需要以易读的方式来读取数据,可以使用 pretty() 方法;
举例子:
- 数据导入
db.users.drop();
var user1 = {"username" : "lison","country" : "china","address" : {"aCode" : "411000","add" : "长沙"},"favorites" : {"movies" : ["杀破狼2","战狼","雷神1"],"cites" : ["长沙","深圳","上海"]},"age" : 18,"salary":NumberDecimal("18889.09"),"lenght" :1.79};
var user2 = {"username" : "james","country" : "English","address" : {"aCode" : "311000","add" : "地址"},"favorites" : {"movies" : ["复仇者联盟","战狼","雷神1"],"cites" : ["西安","东京","上海"]},"age" : 24,"salary":NumberDecimal("7889.09"),"lenght" :1.35
};
var user3 ={"username" : "deer","country" : "japan","address" : {"aCode" : "411000","add" : "长沙"},"favorites" : {"movies" : ["肉蒲团","一路向西","倩女幽魂"],"cites" : ["东莞","深圳","东京"]},"age" : 22,"salary":NumberDecimal("6666.66"),"lenght" :1.85
};
var user4 =
{"username" : "mark","country" : "USA","address" : {"aCode" : "411000","add" : "长沙"},"favorites" : {"movies" : ["蜘蛛侠","钢铁侠","蝙蝠侠"],"cites" : ["青岛","东莞","上海"]},"age" : 20,"salary":NumberDecimal("6398.22"),"lenght" :1.77
};var user5 =
{"username" : "peter","country" : "UK","address" : {"aCode" : "411000","add" : "TEST"},"favorites" : {"movies" : ["蜘蛛侠","钢铁侠","蝙蝠侠"],"cites" : ["青岛","东莞","上海"]},"salary":NumberDecimal("1969.88")
};db.users.insert(user1);
db.users.insert(user2);
db.users.insert(user3);
db.users.insert(user4);
db.users.insert(user5);
db.users.find({"$and":[{"username":"lison"},{"age":18}]},{"username":0,"age":0})
2.2 查询选择器

2.3 查询选择器实战
in选择器
查找姓名为lison、mark、james这个范围的人
db.users.find({"username":{"$in":["lison", "mark", "james"]}}).pretty()
exists选择器
判断文档中有没有关心的字段
db.users.find({"lenght":{"$exists":true}}).pretty()
not选择器
查询高度小于1.77或者没有身高的人
db.users.find({"lenght":{"$not":{"$gte":1.77}}}).pretty()
not语句会把不包含查询语句字段的文档 也检索出来
2.4 映射
- 字段选择并排除其他字段:db.users.find({},{‘username’:1})
- 字段排除:db.users.find({},{‘username’:0})
2.5 排序
- sort():db.users.find().sort({“username”:1}).pretty()
1:升序 -1:降序
2.6 跳过或限制
- skip(n):跳过n条数据
- limit(n):限制n条数据
db.users.find().sort({"username":1}).limit(2).skip(2);
2.7 查询唯一值
distinct():查询指定字段的唯一值,
db.users.distinct("username")
3.字符串数组选择查询
3.1 数组单元素查询
查询数组中包含"蜘蛛侠"
db.users.find({"favorites.movies":"蜘蛛侠"})
3.2 数组精确查找
查询数组等于[ “杀破狼2”, “战狼”, “雷神1” ]的文档
db.users.find({"favorites.movies":[ "杀破狼2", "战狼", "雷神1" ]},{"favorites.movies":1})
3.3 数组多元素查询
查询数组包含[“雷神1”, “战狼” ]的文档
db.users.find({"favorites.movies":{"$all":[ "雷神1", "战狼" ]}},{"favorites.movies":1})
查询数组包含[“雷神1”, “战狼” ]中任意一个的文档
db.users.find({"favorites.movies":{"$in":[ "雷神1", "战狼" ]}},{"favorites.movies":1})
3.4 索引查询
查询数组中第一个为"妇联4"的文档
db.users.find({"favorites.movies.0":"妇联4"},{"favorites.movies":1})
3.5 返回数组子集
$slice可以取两个元素数组,分别表示跳过和限制的条数;
db.users.find({},{"favorites.movies":{"$slice":[1,2]},"favorites":1})
4.对象数组查询
- 数据导入脚本
db.users.drop();
var user1 = {"username" : "lison","country" : "china","address" : {"aCode" : "411000","add" : "长沙"},"favorites" : {"movies" : ["妇联4","杀破狼2","战狼","雷神1","神奇动物在哪里"],"cites" : ["长沙","深圳","上海"]},"age" : 18,"salary":NumberDecimal("18889.09"),"lenght" :1.79,"comments" : [{"author" : "lison1","content" : "lison评论1","commentTime" : ISODate("2017-01-06T00:00:00")},{"author" : "lison2","content" : "lison评论2","commentTime" : ISODate("2017-02-06T00:00:00")},{"author" : "lison3","content" : "lison评论3","commentTime" : ISODate("2017-03-06T00:00:00")},{"author" : "lison4","content" : "lison评论4","commentTime" : ISODate("2017-04-06T00:00:00")},{"author" : "lison5","content" : "lison是苍老师的小迷弟","commentTime" : ISODate("2017-05-06T00:00:00")},{"author" : "lison6","content" : "lison评论6","commentTime" : ISODate("2017-06-06T00:00:00")},{"author" : "lison7","content" : "lison评论7","commentTime" : ISODate("2017-07-06T00:00:00")},{"author" : "lison8","content" : "lison评论8","commentTime" : ISODate("2017-08-06T00:00:00")},{"author" : "lison9","content" : "lison评论9","commentTime" : ISODate("2017-09-06T00:00:00")}]};
var user2 = {"username" : "james","country" : "English","address" : {"aCode" : "311000","add" : "地址"},"favorites" : {"movies" : ["复仇者联盟","战狼","雷神1"],"cites" : ["西安","东京","上海"]},"age" : 24,"salary":NumberDecimal("7889.09"),"lenght" :1.35,"comments" : [{"author" : "lison1","content" : "lison评论1","commentTime" : ISODate("2017-10-06T00:00:00")},{"author" : "lison6","content" : "lison评论6","commentTime" : ISODate("2017-11-06T05:26:18")},{"author" : "lison12","content" : "lison评论12","commentTime" : ISODate("2017-11-06T00:00:00")}]
};
var user3 ={"username" : "deer","country" : "japan","address" : {"aCode" : "411000","add" : "长沙"},"favorites" : {"movies" : ["肉蒲团","一路向西","倩女幽魂"],"cites" : ["东莞","深圳","东京"]},"age" : 22,"salary":NumberDecimal("6666.66"),"lenght" :1.85,"comments" : [{"author" : "lison1","content" : "lison评论1","commentTime" : ISODate("2017-10-06T00:00:00")},{"author" : "lison22","content" : "lison评论6","commentTime" : ISODate("2017-11-06T00:00:00")},{"author" : "lison16","content" : "lison评论12","commentTime" : ISODate("2017-11-06T00:00:00")}]
};
var user4 =
{"username" : "mark","country" : "USA","address" : {"aCode" : "411000","add" : "长沙"},"favorites" : {"movies" : ["蜘蛛侠","钢铁侠","蝙蝠侠"],"cites" : ["青岛","东莞","上海"]},"age" : 20,"salary":NumberDecimal("6398.22"),"lenght" :1.77
};var user5 =
{"username" : "peter","country" : "UK","address" : {"aCode" : "411000","add" : "TEST"},"favorites" : {"movies" : ["蜘蛛侠","钢铁侠","蝙蝠侠"],"cites" : ["青岛","东莞","上海"]},"salary":NumberDecimal("1969.88")
};
db.users.insert(user1);
db.users.insert(user2);
db.users.insert(user3);
db.users.insert(user4);
db.users.insert(user5);
4.1 单元素查询
对象数组精确查找
db.users.find({"comments":{"author" : "lison6","content" : "lison评论6","commentTime" : ISODate("2017-06-06T00:00:00Z")}})
4.2 $in 查找符
查找lison1或lison12评论过的user
db.users.find({"comments.author":{"$in":["lison1","lison12"]}}).pretty()
4.3 $all 操作符
db.users.find({"comments.author":{"$all":["lison12","lison1"]}}).pretty()
4.4 $elemMatch查找符
db.users.find({"comments":{"$elemMatch":{"author" : "lison5",
"content" : { "$regex" : ".*老师.*"}}}}) .pretty()
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
