首页 > 数据库 >MongoDB的一次奇妙查询

MongoDB的一次奇妙查询

时间:2024-04-09 23:14:04浏览次数:23  
标签:sku MongoDB price 奇妙 查询 books id best

这段时间遇到了一个业务需求,我有一些关于书籍的文档数据存储在MongoDB数据中,然后在修复数据之后,需要用一个查询去验证更新是否成功。
书籍数据大概长这个样子:

{
  "books": [
    {
      "name": "UbuntuMeta",
      "sku_id": "101",
      "price": 30.5
    },
    {
      "name": "freePHP",
      "sku_id": "102",
      "price": 75.5
    }
  ],
  "best_books": [
    {
      "name": "UbuntuMeta",
      "sku_id": "101",
      "price": 30.5
    }
  ]
}
···

我想根据sku_id查询到在best_kooks里面元素但不再books里面的元素,根据思考我写出如下的查询语句:
···
 $expr: {
            $not: {
              $setIsSubset: ['$best_books.sku_id', '$books.sku_id']
            }
 }

但是会出现如下报错:

Reason: error while multiplanner was selecting best plan :: caused by :: both operands of $setIsSubset must be arrays. First argument is of type: missing

这是因为best_books可能不存在或者不是array类型,所以需要增加一个条件:

 { $expr: { $eq: [{ $type: "$best_books" }, "array"] } },

标签:sku,MongoDB,price,奇妙,查询,books,id,best
From: https://www.cnblogs.com/freephp/p/18124970

相关文章

  • 查询题目,日期函数
    老王是荆职百获食堂的采购员,每天买白菜50斤,土豆30斤,茄子30斤,豆角50斤,采购完都会记录到下面的Vegetable表中,请你用学到的Oracle知识帮帮老王算算帐。编号白菜单价土豆单价茄子单价豆角单价日期0010.350.50.51.22017/11/100020.4......
  • 多表查询
    一语句查询1, 在SCOTT模式下,检索emp表的指定列(empno,ename,job)2, 检索emp表的sal列,把其值调整为原来的1.53, 在emp表中,使用like关键字匹配以字母s开头的员工名称4, 查询emp表中没有奖金的员工信息5, 在emp表中,查询既不是最高工资,也不是最低工资的员工信息6, ......
  • 查询
    用户名:scott密码:tiger三种方法可以打开sqlplus1win+R打开窗口输入sqlplus2快捷方式3在oracle主菜单下打开select*fromemp;select*fromdept;select1+1fromdual;select99*99fromdual;select99*99fromemp;selectename姓名......
  • 查询下属
    win+R键sqlplus1用户名:scott密码:tigerselect*fromemp;select*fromdept;selectename,sal,commfromemp;selectename,sal+nvl(comm,0)fromemp;selectename,12*(sal+nvl(comm,0))年薪fromemp;1selecte......
  • 查询表
    --1切换到master数据库中usemastergo--2判断cpms数据库是否存在,若存在则删除ifexists(select*fromsys.sysdatabaseswherename='cpms')dropdatabasecpmsgo--3创建cpms数据库createdatabasecpmson(name=cpms_data,filename='c:\cpms\cpms_data.mdf')log......
  • 关于查询优化的一些总结
    一、程序优化热点数据使用缓存数据库读写分离二、数据库方面的优化1、数据库设计优化如果单表数据量过大,可以根据业务来做分表数据库表可以做一些字段冗余,可以减少连表查询,提升查询效率2、Sql语句优化2.1.首先定位慢查询开启慢查询日志mysqlslow_query_log:是否开启慢查询sl......
  • 【数据结构 | 并查集】维护元素分组信息,支持高效合并集合、查询元素所在集合
    文章目录并查集概述引入并查集的实现存储方式Union-Find抽象基类两种实现思路基本实现基于QuickFind思路基于QuickUnion思路优化基于size的优化基于rank的优化find优化路径压缩路径分裂路径减半总结并查集概述并查集(DisjointSetUnion,简称并查集),也叫......
  • ES(ElasticSearch)基础查询语法
    在ES中使用正确有意义的查询语句是很重要的,可以方便、快速的从大量数据中找到想要的数据。所以写好一个查询语句是必不可少的。ES分词器分词器是ES搜索引擎的核心特点,合理了解并使用可以发挥ES最大的效率。后面很多查询也有关,所以应该重点了解分词器。对于存入(Index)中的各个......
  • MyBatis中如果某个查询不希望使用缓存,可以在映射文件中的select语句上设置flushCache=
    <selectid="xmlGetGuaranteeCount"databaseId="sqlserver"resultType="Integer"flushCache="true"><![CDATA[SELECTcount(appisparea.ID)FROMT_APP_ISP_ARE......
  • sql server在高并发状态下同时执行Select查询与Update更新操作时的死锁问题
    最近在项目上线使用过程中使用SqlServer的时候发现在高并发情况下,频繁更新和频繁查询引发死锁。通常我们知道如果两个事务同时对一个表进行插入或修改数据,会发生在请求对表的X锁时,已经被对方持有了。由于得不到锁,后面的Commit无法执行,这样双方开始死锁。但是select语句和upda......