MongoDB 集合字段匹配查询方法

MongoDB是基于分布式文件存储的数据库,本文将介绍如何对MongoDB记录中集合字段进行匹配查询。

1.创建测试数据库

use testdb

db.createUser(  
    {  
        "user":"root",  
        "pwd":"123456",  
        "roles":[{"role" : "readWrite", "db":"testdb"}]  
    }  
) 

db.auth(  
    {  
        "user":"root",  
        "pwd":"123456"  
    }  
)


2.插入测试数据,area_id为集合字段

db.member.insert([
    {
        "id" : 1,
        "name" : "fdipzone",
        "area_id" : [1,2,3],
    },
    {
        "id" : 2,
        "name" : "tom",
        "area_id" : [3,4],
    },
    {
        "id" : 3,
        "name" : "polly",
        "area_id" : [1,3,7],
    },
    {
        "id" : 4,
        "name" : "anslem",
        "area_id" : [2,4,6],
    },
    {
        "id" : 5,
        "name" : "terry",
        "area_id" : [4,5,9],
    }
])

查询插入的数据

db.member.find();
{ "_id" : ObjectId("59f589f5641e44b4c51cb770"), "id" : 1, "name" : "fdipzone", "area_id" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("59f589f5641e44b4c51cb771"), "id" : 2, "name" : "tom", "area_id" : [ 3, 4 ] }
{ "_id" : ObjectId("59f589f5641e44b4c51cb772"), "id" : 3, "name" : "polly", "area_id" : [ 1, 3, 7 ] }
{ "_id" : ObjectId("59f589f5641e44b4c51cb773"), "id" : 4, "name" : "anslem", "area_id" : [ 2, 4, 6 ] }
{ "_id" : ObjectId("59f589f5641e44b4c51cb774"), "id" : 5, "name" : "terry", "area_id" : [ 4, 5, 9 ] }


3.使用$in进行查询

查询area_id含有1的记录

db.member.find({"area_id":{$in:[1]}});
{ "_id" : ObjectId("59f589f5641e44b4c51cb770"), "id" : 1, "name" : "fdipzone", "area_id" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("59f589f5641e44b4c51cb772"), "id" : 3, "name" : "polly", "area_id" : [ 1, 3, 7 ] }

注意,$in只能检查集合内每一个元素是否匹配,只要任意一个匹配就返回记录,并不能检查同时匹配多个元素的情况。

例如要查询area_id同时包含2和4的记录,使用$in只会查询出含有2或4的记录。

db.member.find({"area_id":{$in:[2,4]}});
{ "_id" : ObjectId("59f58ddfa874fe2b3da340bf"), "id" : 1, "name" : "fdipzone", "area_id" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("59f58ddfa874fe2b3da340c0"), "id" : 2, "name" : "tom", "area_id" : [ 3, 4 ] }
{ "_id" : ObjectId("59f58ddfa874fe2b3da340c2"), "id" : 4, "name" : "anslem", "area_id" : [ 2, 4, 6 ] }
{ "_id" : ObjectId("59f58ddfa874fe2b3da340c3"), "id" : 5, "name" : "terry", "area_id" : [ 4, 5, 9 ] }


4.使用$all进行查询

$all可以检查同时匹配多个元素的情况

查询area_id同时含有2和4的记录

db.member.find({"area_id":{$all:[2,4]}});
{ "_id" : ObjectId("59f58ddfa874fe2b3da340c2"), "id" : 4, "name" : "anslem", "area_id" : [ 2, 4, 6 ] }
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值