zoukankan      html  css  js  c++  java
  • mongodb中$push和$pull的使用,向内嵌的数组中删除和添加元素

    mongodb中$push和$pull的使用,向内嵌的数组中删除和添加元素

    假设在集中在存在如下数据:

    {
      "_id" : ObjectId("5cb6e53cb4276075a2262f5b"),
      "results" : [
      {
        "current" : 7.45,
        "origin" : 0,
        "target" : 100,
        "title" : "组织kr",
        "type" : 2,
        "director" : "c673e19320f1461d859f5c8703f7c47f",
        "indepartmental_needs" : "组织kr",
        "_id" : ObjectId("5cb7e9ba439a2716f888c14d"),
        "arr" : [
        {
          "_id" : 1,
          "kid" : 1,
          "parent_id" : null
        },
        {
          "_id" : 2,
          "kr_id" : 2,
          "parent_id" : 1
        },
        {
          "_id" : 3,
          "kr_id" : 3,
          "parent_id" : 1
        },
        {
          "_id" : 4,
          "kr_id" : 3,
          "parent_id" : 1
        },
        {
          "_id" : 5,
          "kr_id" : 1,
          "parent_id" : 1
        }
      ],
    },



    很明显,这个数据的结构是层层嵌套的,并且arr数组中存储了一个打平的父子相互引用的树结构,
    需求1:
    需要再向arr数组中添加元素:

    this.model.findOneAndUpdate(
    {
      'results._id':mongoose.Types.ObjectId(body.ancestors)
    },
    {
      $push:
      {
        "results.$.arr":
      {
        parent_id : 1,
        kr_id : 1
      } 
      }
    },
    {
      upsert:true,
      'new':true
    } ,
    (err,data)=>{
      //return
    }
    );

    $符号是mongodb中的占位符,也就是说当我们指定一个位置或匹配到一个元素之后,这个符号会自动指向平级的元素来进行操作,

    push是直接向数组中进行添加,如果不想添加重复的元素,可以选择使用push是直接向数组中进行添加,如果不想添加重复的元素,可以选择使用push是直接向数组中进行添加,如果不想添加重复的元素,可以选择使用addToSet

    需求2:
    删除内嵌数组中的某一元素:

    this.model.findOneAndUpdate(
    {
      "results._id":mongoose.Types.ObjectId(ancestors_id)
    },
    {
    $pull:
    {
      "results.$.relation_kr_draft":{
      _id: { 
        $in : arr 
      }
      }
    }
    }
    );

    同样的,我们在这里还是使用了$占位符,在我们匹配到元素之后,占位符也自动匹配

    mongo 查找对象数组中某一个或几个匹配的属性用 $elemMatch

    new_parttime_positions: {
       $elemMatch: {
            position: ai.position.position_direct_superior,
            start_time: {
                $lte: moment().toDate()
             },
             end_time: {
                  $gte: moment().toDate()
             }
         }
    }
    

      


    原文链接:https://blog.csdn.net/qq_42427109/article/details/89426172

  • 相关阅读:
    ubuntu下在apache部署python站点
    MySQL设置从库只读模式
    mysql数据库,创建只读用户
    BUG处理流程说明
    bug的处理流程
    nginx 502 Bad Gateway 错误解决办法
    Linux下批量替换文件内容方法
    centos 安装pecl
    php学习资源
    Docker容器进入的4种方式(转)
  • 原文地址:https://www.cnblogs.com/Joans/p/12208607.html
Copyright © 2011-2022 走看看