2
我試圖做一個推一個新值上限陣列:Push和切片多次
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"
]
}
也許我不理解如何使用$推與$切片,但看看文檔我無法弄清楚我做錯了什麼。 achive如何將一個新元素添加到一個封頂陣列?
我想,你在我蒙戈外殼中提到的相同的指令,我能得到預期的輸出。您是否使用db.messages.find()查詢來查看集合? – Sai
是的,我正在使用db.messages.find()。但是,現在我閱讀了您的評論,我想我知道發生了什麼:我使用的是2.2版本,其中文檔指出$ slice修飾符可用於2.4中的$ push。謝謝! – dgaviola
啊哈!很好的發現。嘗試使用下一個版本,然後讓我們知道它是否可行。然後,您可以創建自己的答案,並接受它,以便將來遇到同樣問題的讀者會有用!! :) – Sai