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"
]
}

しかし、2回目の更新後、次のようになります。

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

私が次のことを期待したとき:

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

おそらく、$slice で $push を使用する方法を理解していませんが、ドキュメントを見て、何が間違っているのかわかりませんでした。キャップ付き配列に新しい要素を追加するにはどうすればよいですか?

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

$push 演算子で $each をサポートしていない古いバージョンの MongoDB を使用している可能性があります。実行している MongoDB のバージョンは何ですか? 実行しているバージョンは、MongoDB シェルから次のコマンドを使用して確認できます。

>db.version()

MongoDB の最新リリースを入手するには、次のリンクにアクセスしてください。

http://www.mongodb.org/downloads

于 2013-07-04T16:21:02.070 に答える