MongoDB聚合操作:如何返回包含存在第二个元素的数组的所有文档
MongoDB聚合筛选存在第二个元素的数组文档
要筛选出数组字段存在第二个元素的文档,得注意MongoDB的数组索引是从0开始的——第二个元素对应的索引是1,不是你代码里写的2。下面给两种可行的聚合实现方式:
方法一:通过数组长度判断
直接判断数组长度大于等于2,这样就能确保数组至少包含两个元素(即存在第二个元素):
db.collection.aggregate([ { $match: { $expr: { $gte: [{ $size: "$arr" }, 2] } } } ])
方法二:通过索引元素是否存在判断
利用$arrayElemAt获取索引1的元素,若数组长度不足2,该方法会返回null,通过判断元素不为null来筛选目标文档:
db.collection.aggregate([ { $match: { $expr: { $ne: [{ $arrayElemAt: ["$arr", 1] }, null] } } } ])
你之前的代码里用了$arrayElemAt: ["$arr",2],这其实是在取数组的第三个元素(索引从0计数),如果要匹配第二个元素,记得把索引值改成1。
内容的提问来源于stack exchange,提问作者Amitabh Anand
相关产品推荐
相关产品推荐

