gpt4 book ai didi

mongodb - 在数组中拉数组

转载 作者:可可西里 更新时间:2023-11-01 09:14:08 26 4
gpt4 key购买 nike

类似于Find document with array that contains a specific value ,但我正在努力拉动它。

db.getCollection('users').find({'favorites':{$elemMatch:{0:5719}}}, {"favorites.$": 1})

返回这个:

{
"_id" : "FfEj5chmviLdqWh52",
"favorites" : [
[
5719,
"2016-03-21T17:46:01.441Z",
"a"
]
]
}

即使在返回 1 之后:

Meteor.users.update(this.userId, {$pull: {'favorites':{$elemMatch:{0:movieid}}}})

最佳答案

它不起作用,因为 $pull正在尝试从 "favorites" 数组中删除匹配元素。您要做的是从收藏夹的“数组中的数组” 中删除。

为此,您需要一个位置匹配以指向 nth 内部元素,然后是一个非常小心的 $pull 表达式来实际删除该元素:

Meteor.users.update(
{ "favorites": { "$elemMatch": { "$elemMatch": { "$eq": 5719 } } } },
{ "$pull": { "favorites.$": 5719 } }
)

“双”$elemMatch$eq运算符比 { 0: 5719 } 更具表现力,因为它不仅“锁定”到第一个位置,而且实际上正在查看匹配值。但是,如果必须,或者如果您“真的想”仅在第一个位置匹配该值,则可以这样写。

请注意,从 positional $ 中的匹配返回的“索引”参数实际上是“外部”数组的参数。所以要从

当然,如果其中只有一个嵌套数组元素,您不妨这样写:

  { "$pull": { "favorites.0": 5719 } }

使用直接的“第一个索引”位置,因为您知道内部数组将始终存在。

无论哪种情况,您的对象都会正确更新:

{
"_id" : "FfEj5chmviLdqWh52",
"favorites" : [
[
"2016-03-21T17:46:01.441Z",
"a"
]
]
}

如果您尝试从收藏夹中$pull 整个数组条目,则$eleMatch 只需要拨回一个元素:

Meteor.users.update(
{ "_id": this.userId },
{ "$pull": { "favorites": { "$elemMatch": { "$eq": 5719 } } } }
)

甚至:

Meteor.users.update(
{ "_id": this.userId },
{ "$pull": { "favorites": { "$elemMatch": { "0": 5719 } } } }
)

注意到:

    { "_id": this.userId },

是我们通常用作“查询”选择器的长格式,尤其是当我们想要“不同于”文档的 _id 的标准时。不过,MiniMongo 语句“至少”需要文档的 _id

语句的其余部分有一个“less”$elemMatch,因为 $pull 已经应用于数组。

从外部数组中删除整个匹配元素:

{
"_id" : "FfEj5chmviLdqWh52",
"favorites" : []
}

关于mongodb - 在数组中拉数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36138703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com