因此,例如,如果我有檔案:
{
_id: 1,
items: ["aaa", "bbb", "ccc", "ddd", "eee"]
}
假設我想要第一個元素,那么我當然會得到"aaa"回傳,更新后的檔案將是:
{
_id: 1,
items: ["bbb", "ccc", "ddd", "eee"]
}
我意識到有$pop哪個將分別洗掉第一個或最后一個元素,具體取決于是否使用-1or的引數1,但我還沒有找到一種實際回傳此值的方法
同樣,我也會尋找一種方法來彈出最后一個元素并回傳其值
我希望能夠用一個命令/沒有任何并發??問題來做到這一點......即我不希望一個命令獲取第一個元素,然后另一個命令洗掉第一個元素,因為另一個實體可以獲得相同的值,在原始實體洗掉它之前
另外,有誰知道洗掉第一個元素或最后一個元素之間是否存在性能差異?因為,在許多(所有?)編程語言中,從陣列中洗掉第一個元素是 O(n),而洗掉最后一個元素應該是 O(1)...所以我想知道是否從陣列中“彈出”第一個元素Mongo 陣列會比彈出最后一個陣列慢嗎?
uj5u.com熱心網友回復:
看一下這個
// select some random mongo database for testing
use("stack")
// at first, clean collection
db.data.drop()
// populate with initial data
db.data.insertMany([
{
_id: 1,
items: ["aaa", "bbb", "ccc", "ddd", "eee"]
}
])
// which element do we want to remove, first or last
first_or_last = "first"
db.data.findOneAndUpdate(
// match filter | in real case we should also have array length stored
{_id: 1},
// update query
{ $pop: {"items": {"last": 1, "first": -1}[first_or_last] } },
// options
{ // return popped array element | use $last if in $pop value is 1, $first otherwise
projection: {popped_element: {[`\$${first_or_last}`]: "$items"}, _id: 0},
}
)
// db.data.find()
洗掉“第一個”元素后的結果
{
"popped_element": "aaa"
}
運行 .find() 后
[
{
"_id": 1,
"items": [
"bbb",
"ccc",
"ddd",
"eee"
]
}
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/518135.html
上一篇:未找到檔案時$count不回傳0
