gpt4 book ai didi

mongodb - $push 嵌入文档数组

转载 作者:可可西里 更新时间:2023-11-01 10:33:29 25 4
gpt4 key购买 nike

我想将所有消息标记为“jim”已读。这是一个线程的结构:

db.threads.save({
messages: [
{
read_by: ['bob', 'jim']
},
{
read_by: ['bob']
},
{
read_by: ['bob']
}
]
})

如您所见,一条消息已被“jim”阅读,其余仅被“bob”阅读。我想查找并修改任何嵌入的文档,以便将“jim”附加到 read_by 数组。

这是我得到的地方:

db.threads.findAndModify({
query: {
'messages.read_by': {
$ne: 'jim'
}
},
update: {
$push: {
'messages.$.read_by': 'jim'
}
}
})

我收到这个错误:

uncaught exception: findAndModifyFailed failed: "can't append to array using string field name [$]"

查询使用 db.threads.find(),所以我猜问题出在 findAndModify() 调用的更新部分。

最佳答案

我知道这已经有一段时间了,但确实可以推送到嵌套文档中。您需要在其中添加一个 each 。例如,

db.threads.update({
'messages.read_by': {
$ne: 'jim'
}
},
{
$push: {
'messages.read_by': {
$each: ['jim']
}
}
}
)

更多示例请参见此处 - http://docs.mongodb.org/manual/reference/operator/update/push/

即使您只传递一个值,对于嵌套数组,您也需要传递 $each。如果文档已经包含一个带有一些值的 read_by 字段,那么没有 each 的更新就可以了。无论该字段是否存在,使用 $each 都会起作用。

关于mongodb - $push 嵌入文档数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15407851/

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