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