MongoDB和MongoTemplate对于嵌套数据的判空查询

在这里插入图片描述

前言:

不知道有没有和小名一样,接触MongDB时间不长的小伙伴。由于MongoDB是以文档形式存储数据的,所以其中的数据类型相对MySql或者Oracle关系型数据库丰富一些(MongoDB是NoSQL数据库这里比较不是很准确)

我们在关系型数据库中查询非空数据习以为常(例如:where id <> “”),但是到了MongoDB中出现了“数组”这种存储格式,而且,数组又存在一维数组和二维数组,当我们在需求中遇到“查询二维数组不为空”时,这就让一些不熟悉MongDB的小伙伴头痛了。

所以小名将平时用过的一些查询MongoDB中不为空的方法分享给大家,希望大家用得到:

文章目录

  • 一、MongoDB查询数组不为空
  • 二、示例
    • 1. MongoDB查询数组不为空
    • 2. MongoTemplate查询数组不为空
    • 3. 不知道如何归类但又常用的复杂语句

首先我们先来看MongoDB中的查询方式:

一、MongoDB查询数组不为空

  1. $elemMatch $ne
db.Collection.find({array:{$elemMatch:{$ne:null}}})
  1. $where
db.Collection.find({$where:"this.array.length>0"})
  1. $not $size
db.Collection.find({array: {$not: {$size: 0}}})
  1. ‘.’ 路径和 $exists
db.Collection.find({{'array.0': {$exists: 1}}})
  1. $exists $ne
db.Collection.find({ array: { $exists: true, $ne: [] } })
  1. $gt
db.Collection.find({ array: { $gt: [] } })

二、示例

我们先来看下数据结构

{
    "_id" : "1",
    "prodectList" : [ 
        {
            "prodectId" : "001",
            "prodectName" : "保温杯",
            "price" : "29.90",
            "salesChannelsList" : [ 
                {
                    "channel" : 0,
                    "price" : "0"
                }, 
                {
                    "channel" : 1,
                    "price" : "4.90"
                }, 
                {
                    "channel" : 2,
                    "price" : "0"
                }, 
            ]
        }
    ],
    "deleteFlg" : 0,
}

1. MongoDB查询数组不为空

MongoDB查询一维数组查询其中包含的值

db.getCollection('PHO_PRODECT').find({"salesChannelsList":{$elemMatch:{$eq:0}}})

MongoDB按条件查询嵌套数组

db.getCollection('PHO_PRODECT').find({"prodectList.salesChannelsList":{$elemMatch:{"channel":1,"price" : "4.90"}}})

MongoDB查询二维数组不为空

db.getCollection('PHO_PRODECT').find({"prodectList.salesChannelsList.0":{$exists:true}})

2. MongoTemplate查询数组不为空

MongoTemplate查询二维数组不为空

queryItem.addCriteria(Criteria.where("prodectList.salesChannelsList.length").gt(0));

MongoTemplate查询一维数组不为空

queryItem.addCriteria(Criteria.where("salesChannelsList.0").exists(true));

3. 不知道如何归类但又常用的复杂语句

➡️ ➡️ Mongdb常用复杂语句(nosql)总结 ⬅️ ⬅️

你可能感兴趣的:(笔记,mongodb,数据库,nosql)