六、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()


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部