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

  • 相关阅读:
    监控文件变化
    哈希+ LIst + 流文件 应用
    (转)Delphi版木马彩衣一个简单的花指令伪装器
    (转)TThread 详解
    遍历菜单
    哈希 + LIST简单应用(DELPHI)
    WINDOWS API速查
    ASP.NET 3.5的页面指令
    感冒怎么治?
    ASPNET应用程序文件夹
  • 原文地址:https://www.cnblogs.com/Joans/p/12208607.html
Copyright © 2011-2022 走看看