请通过浏览器功能收藏网页

MongoDB查询shell命令 数组查询相关操作 mongodb

发布时间:2018-09-06 14:09:10  作者:本站编辑  来源:本站原创  浏览次数:
我有话说 | 分享 |
www.javainfo.com.cn 上干货 欢迎收藏

单个元素匹配,就跟前面写条件一样,{key:value}

> db.temp.find();

{ "_id" : ObjectId("5b8f3974dfb2a160dbb01a8c"), "name" : "www", "age" : 22, "addr" : "china tangshan lubei" }

{ "_id" : ObjectId("5b8f3983dfb2a160dbb01a8d"), "name" : "3111", "age" : 32, "addr" : "china tangshan lubei" }

{ "_id" : ObjectId("5b8f61b0914cf734f786d9e0"), "addr" : "666644rrrr" }

{ "_id" : ObjectId("5b8f6a75914cf734f786d9e1"), "item" : "boo4k", "qty" : 11, "fenshu" : 98 }

{ "_id" : ObjectId("5b8f982e4275a0cef716d145"), "name" : "www", "age" : 52, "addr" : "china" }

{ "_id" : ObjectId("5b8f997f4275a0cef716d146"), "name" : "ggg", "age" : 15 }

{ "_id" : ObjectId("5b8f99874275a0cef716d147"), "name" : "www", "age" : 15 }

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44, 55, 22, 88 ] }


> db.temp.find({fenshu:44}); 查找分数中包含44的数据

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44, 55, 22, 88 ] }

> db.temp.find({fenshu:{$in:[44,55]}});

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44, 55, 22, 88 ] }

多个元素匹配,使用$all, {key:{$all:[a,b]}},元素的顺序无所谓

        db.temp.find({fenshu:{$all:[44,55]}});   完全匹配

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44, 55, 22, 88 ] }

> db.temp.find({fenshu:{$all:[44,99]}});

> 无结果


可以使用索引指定查询数组特定位置, {“key.索引号”:value}


{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44, 55, 22, 88 ] }

> db.temp.find({"fenshu.2":22}); 查找第三值是22的数组 所在的文档列表

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44, 55, 22, 88 ] }


查询某个长度的数组,使用$size

> db.temp.find({fenshu:{$size:2}});   查找长度为2的数组 所在的文档列表

> db.temp.find({fenshu:{$size:4}});   查找长度为4的数组 所在的文档列表

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44, 55, 22, 88 ] }



$slice,正数是前面多少条,负数是尾部多少条,也可以指定偏移量和要返回的元素数量,比如:$slice:[50,10]

          查找包含分数字段的记录,分数取出后面2两值

> db.temp.find({fenshu:{$exists:1}},{fenshu:{$slice:-2}});

{ "_id" : ObjectId("5b8f6a75914cf734f786d9e1"), "item" : "boo4k", "qty" : 11, "fenshu" : 98 }

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 22, 88 ] }

查找包含分数字段的记录,分数取出前面2两值

> db.temp.find({fenshu:{$exists:1}},{fenshu:{$slice:2}});

{ "_id" : ObjectId("5b8f6a75914cf734f786d9e1"), "item" : "boo4k", "qty" : 11, "fenshu" : 98 }

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44, 55 ] }


可以使用$来指定符合条件的第一个数组元素,如:{”users.$”:1}

db.temp.find({fenshu:{$exists:1}},{"fenshu.$":1});

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44 ] }

> db.temp.find({fenshu:{$exists:1}},{"fenshu.$":5});

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44 ] }

> db.temp.find({fenshu:{$exists:1}},{"fenshu.$":5});

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44 ] }



$elemMatch:要求同时使用多个条件语句来对一个数组元素进行比较判断

        > db.temp.find({fenshu:{$elemMatch:{$gt:55,$lt:55}}});

> db.temp.find({fenshu:{$elemMatch:{$gt:54,$lt:55}}});

> db.temp.find({fenshu:{$elemMatch:{$gt:54,$lte:55}}});

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44, 55, 22, 88 ] }

> db.temp.find({fenshu:{$elemMatch:{$gte:54,$lte:55}}});

{ "_id" : ObjectId("5b8fa0d4e23974df0f5530eb"), "fenshu" : [ 44, 55, 22, 88 ] }



如有疑问 请留言 欢迎提供建议
  • 0

    开心

  • 0

    板砖

  • 0

    感动

  • 0

    有用

  • 0

    疑问

  • 0

    难过

  • 0

    无聊

  • 0

    震惊

评论已有 0