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 
  }
  }
}
}
);

同样的,我们在这里还是使用了$占位符,在我们匹配到元素之后,占位符也自动匹配
————————————————
版权声明:本文为CSDN博主「多比熊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42427109/article/details/89426172

相关推荐