2

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

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 一起使用,但是查看文档我无法弄清楚我做错了什么。如何实现将新元素添加到上限数组?

4

1 回答 1

1

您观察到的行为可以在 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" ] }

从文档中,在 2.4 版中添加了对 $push 运算符的 $each 支持

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

于 2013-07-04T16:21:02.070 回答