如何在Mongodb中仅当字符串包含名为www.example.com的子字符串时才从数组中删除数组元素abc.com?

x6h2sr28  于 2022-11-22  发布在  Go
关注(0)|答案(2)|浏览(105)

有人能帮我查询一下如何在mongodb中从数组中删除字符串(仅当该字符串包含子字符串“www.example.com“时)吗abc.com
集合中的当前结果:

{
 _id: '1',
users: ['1@abc.com', '2@abc.com', '3@def.com']
}
{
 _id: '2',
users: ['1@abc.com', '2@def.com', '3@def.com']
}

预期结果:

{
     _id: '1',
    users: ['3@def.com']
}
{
     _id: '2',
    users: ['2@def.com', '3@def.com']
}
wbrvyc0a

wbrvyc0a1#

对于只读查询,您可以使用$filter运算符通过$not$regexMatch运算符筛选与域地址不匹配的值。

db.collection.aggregate([
  {
    $set: {
      users: {
        $filter: {
          input: "$users",
          cond: {
            $not: {
              $regexMatch: {
                input: "$$this",
                regex: "(?:@abc\\.com)$"
              }
            }
          }
        }
      }
    }
  }
])

Demo (Read-only) @ Mongo Playground
更新文档,您需要使用$pull运算符从数组中删除与正则表达式匹配的值。

db.collection.update({
  users: {
    $regex: "(?:@abc\\.com)$"
  }
},
{
  $pull: {
    users: {
      $regex: "(?:@abc\\.com)$"
    }
  }
},
{
  multi: true
})

Demo (Update) @ Mongo Playground

83qze16e

83qze16e2#

也许这对你有用:

var str="abc.com"
db.find({users: { $in: [str] }},(err,objects)=>{

    if(err)return;
    if(objects.count() ==0) return;
    objects.map(obj=>{
        obj.users = obj.users.filter((name) => !name.includes(str));
        obj.save()
    })
})

相关问题