mongodb - mongo:如何投影不包括某些值的数组元素?
问题描述
我正在使用 Mongo 3.6。如何返回不在某个值列表中的数组项?
这是文档:
{
"_id" : "myId",
"myList" : [
"a",
"b",
"c"
]
}
这是查询,它只返回第一个匹配项:
db.getCollection('Item').find({_id:"myId"}, {
myList:{ $elemMatch:{
$not: { $in:["a"] }
}}
})
结果:
{
"_id" : "myId",
"myList" : [ "b" ]
}
预期结果 - 如何更改上面的查询以返回“不在 [“a”] 中的所有匹配项?产生的东西:
{
"_id" : "myId",
"myList" : [ "b", "c" ]
}
知道为什么缺少物品吗?
解决方案
用户聚合与
$过滤器
如下以获得预期的输出:
db.getCollection("Item").aggregate([
{
$project: {
list: {
$filter: {
input: "$myList",
as: "item",
cond: { $ne: ["$$item", "a"] },
},
},
},
},
]);
推荐阅读
- soap - 如何使用带有 TBA 凭据的 SOAP API 在 Netsuite 中创建销售订单?
- javascript - 在使用 react-beautiful-dnd 发生拖拽的情况下捕获错误
- visual-studio - ClickOnce .net 5 更新设置
- reactjs - 如何通过 10 onclick 从 API 加载更多图像并限制为 50?
- sql - teradata SQL CASE WHEN - SELECT 失败。3771: CASE 表达式的 WHEN 子句中有非法表达式
- python - 从 tkinter 上的按钮按下启动另一个脚本
- java - Spring Data JDBC - @Column 注释在 setter 上不起作用
- sql - 前行的总和并与另一列的值相乘
- php - Symfony - 用另一个实体的 id 重载实体集函数
- sql - PostgreSQL:插入一个表,然后在同一个查询中使用相同的子查询更新另一个表