【发布时间】:2017-01-03 03:07:39
【问题描述】:
我正在学习 MongoDB,我决定尝试使用 $pop 进行一些小练习:
MongoDB Enterprise > db.produits.insert({compteur: 100001, tab:['a','b','c']})
WriteResult({ "nInserted" : 1 })
MongoDB Enterprise > db.produits.find({compteur: 100001});
{ "_id" : ObjectId("57c011106d76da1c1e34edd2"), "compteur" : 100001, "tab" : [ "a", "b", "c" ] }
MongoDB Enterprise > db.produits.update({compteur: 100001}, {$push: {tab: 'd'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
MongoDB Enterprise > db.produits.find({compteur: 100001});
{ "_id" : ObjectId("57c011106d76da1c1e34edd2"), "compteur" : 100001, "tab" : [ "a", "b", "c", "d" ] }
MongoDB Enterprise > db.produits.update({compteur: 100001}, {$pop:{tab:1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
MongoDB Enterprise > db.produits.find({compteur: 100001});
{ "_id" : ObjectId("57c011106d76da1c1e34edd2"), "compteur" : 100001, "tab" : [ "a", "b", "c" ] }
MongoDB Enterprise > db.produits.update({compteur: 100001}, {$push:{tab:['d', 'e', 'f', 'g']}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
MongoDB Enterprise > db.produits.find({compteur: 100001});
{ "_id" : ObjectId("57c011106d76da1c1e34edd2"), "compteur" : 100001, "tab" : [ "a", "b", "c", [ "d", "e", "f", "g" ] ] }
MongoDB Enterprise > db.produits.update({compteur: 100001}, {$pop:{tab:3}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
MongoDB Enterprise > db.produits.find({compteur: 100001});
{ "_id" : ObjectId("57c011106d76da1c1e34edd2"), "compteur" : 100001, "tab" : [ "a", "b", "c" ] }
我不明白逻辑:
最后一次pop删除了数组中的数组,但是为什么呢?
我要求弹出 3,我认为它可以:
1 - 在选项卡内弹出选项卡中的最后 3 个条目(即“e”、“f”和“g”)
2 - 将表格作为单个元素弹出,然后弹出之前的 2 元素(所以 "b" 和 "c")
我在这里,我不明白发生了什么:/
【问题讨论】:
-
哈哈,我在职业生涯中发现的第一个错误。我很自豪:P
-
我不认为这是一个错误。由于
tab字段中的最后一项是数组,因此db.produits.update({compteur: 100001}, {$pop:{tab:3}});操作正确弹出最后一个元素(即数组)。 OP 正在寻找的操作可能是db.produits.update({compteur: 100001}, {$pop:{"tab.3":-1}});弹出嵌入数组"d"中的第一个元素,或者db.produits.update({compteur: 100001}, {$pop:{"tab.3":1}});弹出最后一个"g"。 -
当我要求弹出最后三个元素时,我不明白只删除一个 4 元素数组的逻辑:/
-
$pop运算符删除数组的第一个或最后一个元素,本例中的数组是一个堆栈。我想你在这里寻找$slice运算符。 -
好的,我们开始了。
$pop不会删除超过 1 个元素。所以 3 与 1 作为一个值被视为相同。
标签: javascript arrays mongodb