zoukankan      html  css  js  c++  java
  • mongoDB5--mongoDB增删改查

    之前我们探讨了mongodb的“增删改查”,要知道,我们的增删改其实都离不开查询表达式,所以查询表达式在mongodb是非常重要的。关于查询其实我们只是介绍了以小部分。
    关于mongodb的查询表达式,我们要进行深一步的了解。

    我们有一个数据集,是商城的商品信息:

    下载链接:http://download.csdn.net/detail/u013517797/9726120

    我们要把商城的商品信息插入到mongodb上,商品有以下字段:
    goods_id 商品主键
    cat_id 所在栏目
    goods_name 商品名
    goods_number 商品剩余库存数量
    click_count 点击量
    shop_price 本店价格
    add_time 添加时间


    我们创建一个商城数据库(shop),然后创建一个商品表(goods),将数据集
    中的数据全部加入进去
    (数据量比较大的时候控制台处理不了,所以大家把数据分三次插入进去!):


    一共有id到32的数据,一共有31条数据。使用db.goods.fond();能查到31条数据说明我们数据全部插入了:

    db.goods.find().count();指令统计查出数据的数量。

    接下来开始深入学习查询表达式。
    注:以下查询基于导入的商品表。

    1.基础查询 where练习

    查出满足以下条件的商品
    1.1:主键为32的商品
    db.goods.find({goods_id:32});


    1.2:不属第3栏目的所有商品($nq)
    $ne就是“!=”(不等于NotEqual)的意思
    语法:{field:{$ne:value}}
    作用:查filed列的值不等于value的文档
    db.goods.find({cat_id:{$ne:3}},{cat_id:1,goods_name:1,_id:0});


    1.3:本店价格高于3000元的商品($gt)
    $gt就是“>”(大于great)的意思
    语法:{filed:{$gt:value}}
    作用:查filed列的值大于value的文档
    db.goods.find({shop_price:{$gt:3000}},{goods_name:1,shop_price:1,_id:0});


    1.4:本店价格低于等于100元的商品($lt)
    $lt就是“<”(小于little)的意思
    语法:{filed:{$lt:value}}
    作用:查filed列的值小于等于value的文档(等于在后面加“e”即可,大于小于通用)
    db.goods.find({shop_price:{$lte:100}},{goods_name:1,shop_price:1,_id:0});


    1.5:取出第4栏目或第11栏目的商品($in)
    $in就是“in”(位于)的意思
    语法:{filed:{$in:[数组内容]}}
    作用:查filed列的值位于数组[]中的文档
    db.goods.find({cat_id:{$in:[4,11]}},{cat_id:1,goods_name:1,_id:0});


    1.5.2:取出不在第4栏目或第11栏目的商品($nin)
    $nin就是“notin”(不位于)的意思
    语法:{filed:{$nin:[数组内容]}}
    作用:查filed列的值不位于数组[]中的文档
    db.goods.find({cat_id:{$nin:[4,11]}},{cat_id:1,goods_name:1,_id:0});


    1.6:取出100<=价格<=500的商品($and)
    $and就是“and”(与)的意思
    语法:{$and:[{filed:value1},{filed:value2}...]}
    作用:查filed位于value1与value2之间的文档
    db.goods.find({$and:[{shop_price:{$gte:100}},{shop_price:{$lte:500}}]},{shop_price:1,goods_name:1,_id:0});


    1.7:取出不属于第3栏目且不属于第11栏目的商品($and $nin和$nor分别实现)
    $nor就是“Neither nor”(既不也不)的意思
    语法:{$nor:[{filed:value1},{filed:value2}...]}
    作用:查filed既不位于value1,也不value2的文档
    db.goods.find({$nor:[{cat_id:3},{cat_id:11}]},{goods_name:1,cat_id:1,_id:0});

    db.goods.find({cat_id:{$nin:[3,11]}},{goods_name:1,cat_id:1,_id:0});

    db.goods.find({$and:[{cat_id:{$ne:3}},{cat_id:{$ne:11}}]},{goods_name:1,cat_id:1,_id:0});


    1.8:取出价格大于100且小于300,或者大于3000且小于5000的商品($or)

    db.goods.find({$or:[{$and:[{shop_price:{$gt:100}},{shop_price:{$lt:300}}]},{$and:[{shop_price:{$gt:3000}},{shop_price:{$lt:5000}}]}]},{shop_price:1,goods_name:1,_id:0});

    太长不太好理解,我们拆分一下:
    原始语句:
    {$or:[条件1,条件2]},{shop_price:1,goods_name:1,_id:0}

    其中的条件1和2为以下两条:
    {$and:[{shop_price:{$gt:100}},{shop_price:{$lt:300}}]}

    {$and:[{shop_price:{$gt:3000}},{shop_price:{$lt:5000}}]}


    1.9:取出goods_id%5==1(对5取余等于1),即1,6,11,...这样的商品($mod)
    $mod就是“mod”(取余)的意思
    语法:{filed:{$mod:[num1,num2]}}
    作用:查filed对num1取余之后结果是num2的所有数据
    db.goods.find({goods_id:{$mod:[5,1]}},{goods_id:1,goods_name:1,_id:0});


    1.10:取出有add_time属性的文档($exists)
    $exists就是“exists”(存在)的意思
    语法:{filed:{$exists:1}}
    作用:含有filed属性的文档将会被查到
    db.goods.find({add_time:{$exists:1}},{goods_name:1,add_time:1,_id:0});


    1.11:取出属性为String类型的文档($type)
    $type就是“type”(类型)的意思
    语法:{filed:{$type:1}}
    作用:filed属性类型为type的文档将会被查到
    type类型用数字描述:

    db.goods.find(goods_name:{$type:2},{goods_id:1,goods_name:1,_id:0});


    1.12:取出student中爱好hobby数组中含有'b','c'的文档($all)
    $all就是“all”(包含所有)的意思
    语法:{filed:{$all:[数据1,数据2,数据3...]}}
    作用:filed属性(一般是一个数组)中包含数据1/2/3...的文档将会被查到
    db.student.find({hobby:{$all:['b','c']}});

  • 相关阅读:
    nginx 负载均衡配置
    nginx 配置优化详解
    duilib -- Label控件的bug(转载)
    Duilib实现GroupBox控件
    Duilib动画按钮实现(转载)
    Duilib中Webbrowser事件完善使其支持判断页面加载完毕
    Duilib实现圆形头像控件
    duilibutilsutils.h(251) : error C2504: “VARIANT”: 未定义基类
    软件项目版本号的命名规则及格式
    c++中char*wchar_t*stringwstring之间的相互转换
  • 原文地址:https://www.cnblogs.com/gaochsh/p/6287656.html
Copyright © 2011-2022 走看看