MongoDb 如果长度更大,则从数组中删除最后一个元素
问题:MongoDb 如果长度更大,则从数组中删除最后一个元素 我正在使用Mongodb,结构如下: **{ "_id" : ObjectId("5693af5d62f0d4b6af5124f1"), "uid" : 1, "terms" : [ "sasasdsds", "test", "abcd" ] }** 如果数组的长度大于 10,我想从数组中删除最后一个元素。是否可以在单个查询中完成?
·
问题:MongoDb 如果长度更大,则从数组中删除最后一个元素
我正在使用Mongodb,结构如下:
**{
"_id" : ObjectId("5693af5d62f0d4b6af5124f1"),
"uid" : 1,
"terms" : [
"sasasdsds",
"test",
"abcd"
]
}**
如果数组的长度大于 10,我想从数组中删除最后一个元素。是否可以在单个查询中完成?
解答
对的,这是可能的。您使用的是“点表示法”的属性来测试数组是否包含至少 11 个成员,然后将$pop
更新修饰符应用于数组:
db.collection.update(
{ "terms.10": { "$exists": 1 } },
{ "$pop": { "terms": 1 } },
{ "multi": true }
)
因此,通过索引测试数组中是否存在n-1
元素,这意味着它必须至少有那么多成员才能使用$exists
运算符进行匹配。这与$size
相反,后者正在寻找要匹配的数组的“精确”长度。
然后参数中带有正整数的$pop
会从该数组中删除最后一个条目。
另一种情况是您只想在数组中保留 10 个条目而不管长度如何,然后您可以将$slice
修饰符应用于$push
更新运算符:
db.collection.update(
{ "terms.10": { "$exists": 1 } },
{ "$push": { "terms": { "$each": [], "$slice": 10 } } },
{ "multi": true }
)
$push
可能不明显的例子是当$each
修饰符有一个空数组时,没有对数组进行(推送)更改,但是应用$slice
来限制整个数组长度。在这种情况下,从数组的开始(第一个n
个元素)使用正整数。对于“最后一个”n
元素,负数来自数组的“末尾”。
在每种情况下,"multi"
修饰符用于将语句应用于更新的查询条件中的所有匹配文档。在这两种情况下,最好只修改匹配的文档。
更多推荐
已为社区贡献32870条内容
所有评论(0)