• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Joan
博客园    首页    新随笔    联系   管理    订阅  订阅
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

作者:Joan
出处:http://www.cnblogs.com/Joans/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted on 2020-01-18 11:36  Joans  阅读(4961)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3