我在 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,然后检索它的信息,因为从长远来看它会很重
您应该使用 过滤位置运算符
$[<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: ""
}
}
]
})