Mongoose 条件在父数组中查找元素

问题描述 投票:0回答:1

我在 mongoDB 数据库中有以下数据

db.getCollection("Users").findOne({_id:ObjectId("659d3cfb7a0f835f5cb468e3")})

结果

 {
    "_id" : ObjectId("659d3cfb7a0f835f5cb468e3"),
    "Username" : "bassem",
    "FirstName" : "Bassem",
    "LastName" : "Alameddine",
    "Password" : "bassem",
    "isDeleted" : false,
    "SendBirdId" : "1",
    "StatusText" : ".",
    "ProfilePic" : "bassem.png",
    "Channels" : [
        {
            "toUserId" : ObjectId("659e9a027a0f835f5cb46901"),
            "url" : "sendbird_group_channel_208215769_89dda4a153f20eca1707aa85973837e70fe2ea0b"
        },
        {
            "toUserId" : ObjectId("659e9a027a0f835f5cb46901"),
            "url" :""
        }
    ]
}

我需要更新我的 qeury 以仅查找具有 url 填充的 toUserId 的位置,所以>

{
                "toUserId" : ObjectId("659e9a027a0f835f5cb46901"),
                "url" : "sendbird_group_channel_208215769_89dda4a153f20eca1707aa85973837e70fe2ea0b"
            },

这可能吗?

更新

我已将我的查询更新为以下内容

db.getCollection("Users").findOne({
"_id": ObjectId("659d3cfb7a0f835f5cb468e3"),
"Channels": {
    $elemMatch: {
        "url": { $ne: "" }
    }
 }
})

它给了我所需的结果

{
"_id" : ObjectId("659d3cfb7a0f835f5cb468e3"),
"Username" : "bassem",
"FirstName" : "Bassem",
"LastName" : "Alameddine",
"Password" : "bassem",
"isDeleted" : false,
"SendBirdId" : "1",
"StatusText" : ".",
"ProfilePic" : "bassem.png",
"Channels" : [
    {
        "toUserId" : ObjectId("659e9a027a0f835f5cb46901"),
        "url" : "sendbird_group_channel_208215769_89dda4a153f20eca1707aa85973837e70fe2ea0b"
    }
  ]
}

我的问题是,有没有办法填充

toUserId
的信息,我不想做一个channels.map并获取toUserId,然后检索它的信息,因为从长远来看它会很重

mongodb
1个回答
0
投票

您应该使用 过滤位置运算符

$[<identifier>]
更新嵌套元素。

db.collection.update({
  _id: ObjectId("659d3cfb7a0f835f5cb468e3"),
  Channels: {
    $elemMatch: {
      toUserId: ObjectId("659e9a027a0f835f5cb46901"),
      url: {
        $ne: ""
      }
    }
  }
},
{
  $set: {
    "Channels.$[channel].url": "YOUR NEW VALUE"
  }
},
{
  arrayFilters: [
    {
      "channel.toUserId": ObjectId("659e9a027a0f835f5cb46901"),
      "channel.url": {
        $ne: ""
      }
    }
  ]
})

演示@Mongo Playground

© www.soinside.com 2019 - 2024. All rights reserved.