gpt4 book ai didi

mongodb - 在 MongoDB 中多次推送和切片

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

我正在尝试将新值推送到上限数组:

db.messages.insert({name:"test1"})
db.messages.update({name:"test1"}, {"$push":{"output": {"$each": ["test1"], "$slice": -10}}})
db.messages.update({name:"test1"}, {"$push":{"output": {"$each": ["test2"], "$slice": -10}}})

所以,我第一次执行更新时,我得到了我期望的结果:

{
"_id" : ObjectId("51d482ee7252cb3f7eb81ac1"),
"name" : "test1",
"output" : [
"test1"
]
}

但是,在第二次更新之后,我得到以下信息:

{
"_id" : ObjectId("51d482ee7252cb3f7eb81ac1"),
"name" : "test1",
"output" : [
"test1",
{
"$each" : [
"test2"
],
"$slice" : -10
}
]
}

当我期望以下内容时:

{
"_id" : ObjectId("51d482ee7252cb3f7eb81ac1"),
"name" : "test1",
"output" : [
"test1",
"test2"
]
}

可能我不明白如何将 $push 与 $slice 一起使用,但是查看文档我无法弄清楚我做错了什么。如何将新元素添加到上限数组?

最佳答案

您观察到的行为可以在 MongoDB 2.2 版中重现。您的示例在 MongoDB 2.4 版中按预期工作

> db.things.insert({name:"test1"})
> db.things.update({name:"test1"}, {"$push":{"output": {"$each": ["test1"], "$slice": -10}}})
> db.things.find()
{ "_id" : ObjectId("51d489f730d17c1ffbd6ff9f"), "name" : "test1", "output" : [ "test1" ] }
> db.things.update({name:"test1"}, {"$push":{"output": {"$each": ["test2"], "$slice": -10}}})
> db.things.find()
{ "_id" : ObjectId("51d489f730d17c1ffbd6ff9f"), "name" : "test1", "output" : [ "test1", "test2" ] }

从文档中可以看出,$each 对 $push 运算符的支持是在 2.4 版本中添加的

http://docs.mongodb.org/manual/reference/operator/each/#op._S_each

很可能您使用的是旧版本的 MongoDB,它不支持 $each 和 $push 运算符。你运行的是什么版本的 MongoDB?您可以从 MongoDB shell 中使用以下命令找出您正在运行的版本。

>db.version()

要获取最新版本的 MongoDB,请访问以下链接。

http://www.mongodb.org/downloads

关于mongodb - 在 MongoDB 中多次推送和切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17457133/

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