• mongoDB管道数组查询


    1. 初始化数据

    db.createCollection("t_demo")
    
    db.t_demo.insertMany([
    {num:[1,2,3], obj: [{name: "zhang1", age: 12}, {name: "li1", age: 13}]},
    {num:[1,2], obj: [{name: "zhang2", age: 12}, {name: "li2", age: 13}]},
    {num:[1,], obj: [{name: "zhang3", age: 14}, {name: "li2", age: 15}]},
    ])
    
    

    2. 基本数据类型查询

    • in 数组中匹配到任意一个
    • all 数组中要包含所有

    1. 查询包含1或者2

    db.t_demo.aggregate([{
    $match: {
        num: {$in: [1,2]}
    }
    }])
    

    查出3条数据

    /* 1 */
    {
      "_id" : ObjectId("6210a06d13adc55355d6495f"),
      "num" : [1, 2, 3],
      "obj" : [{
          "name" : "zhang1",
          "age" : 12
        }, {
          "name" : "li1",
          "age" : 13
        }]
    }
    
    /* 2 */
    {
      "_id" : ObjectId("6210a06d13adc55355d64960"),
      "num" : [1, 2],
      "obj" : [{
          "name" : "zhang2",
          "age" : 12
        }, {
          "name" : "li2",
          "age" : 13
        }]
    }
    
    /* 3 */
    {
      "_id" : ObjectId("6210a06d13adc55355d64961"),
      "num" : [1],
      "obj" : [{
          "name" : "zhang3",
          "age" : 14
        }, {
          "name" : "li2",
          "age" : 15
        }]
    }
    

    2. 查询包含1和2

    db.t_demo.aggregate([{
    $match: {
        num: {$all: [1,2]}
    }
    }])
    

    结果2条数据

    /* 1 */
    {
      "_id" : ObjectId("6210a06d13adc55355d6495f"),
      "num" : [1, 2, 3],
      "obj" : [{
          "name" : "zhang1",
          "age" : 12
        }, {
          "name" : "li1",
          "age" : 13
        }]
    }
    
    /* 2 */
    {
      "_id" : ObjectId("6210a06d13adc55355d64960"),
      "num" : [1, 2],
      "obj" : [{
          "name" : "zhang2",
          "age" : 12
        }, {
          "name" : "li2",
          "age" : 13
        }]
    }
    

    3. 查询等于1和2

    这里不使用$eq的原因是: $eq要保证顺序也要一致 [1,2][2,1]是不相等的

    db.t_demo.aggregate([{
    $match: {
        num: {$all: [1,2]},
        num: {$size: 2}
    }
    }])
    

    结果1条

    /* 1 */
    {
      "_id" : ObjectId("6210a06d13adc55355d64960"),
      "num" : [1, 2],
      "obj" : [{
          "name" : "zhang2",
          "age" : 12
        }, {
          "name" : "li2",
          "age" : 13
        }]
    }
    

    3. 对象类型查询

    通过$elemMatch或者数组名.属性名进行查询

    # $elemMatch
    db.t_demo.aggregate([{
    $match: {
        obj: {$elemMatch: {age:12}}
    }
    }])
    
    db.t_demo.aggregate([{
    $match: {
        obj: {$elemMatch: {name: "zhang1", age: 12}}
    }
    }])
    
    # 数组.
    db.t_demo.aggregate([{
    $match: {
        "obj.age": 12
    }
    }])
    
    db.t_demo.aggregate([{
    $match: {
        "obj.name": "zhang1",
        "obj.age": 12
    }
    }])
    
  • 相关阅读:
    Grove.net实践ORM学习笔记
    COM+的事务
    Delphi中MIDAS线程模型
    Delphi中封装ADO之我重学习记录。。。
    100 多个JaveScript 常用函数
    javascript 事件
    js 收藏
    js 常用函数
    表单11种Input的高级用法
    UltraEdit 使用技巧
  • 原文地址:https://www.cnblogs.com/linyufeng/p/15912922.html
Copyright © 2020-2023  润新知