MongoDB查询shell命令 数组查询相关操作 mongodb
单个元素匹配,就跟前面写条件一样,{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 条