javascript - 如何仅过滤文档中数组的某些行?
问题描述
我有一个 MongoDB 文档集合,使用这样的模式:
var schema = new Schema({
name: String,
images: [{
uri: string,
active: Boolean
}]
});
我想获取所有文档(或使用某些条件进行过滤),但在images
数组中仅检索具有特定属性的项目(在我的情况下,它是{active: true}
)。
这就是我现在所做的:
db.people.find( { 'images.active': true } )
但这仅检索具有至少一个活动图像的文档,这不是我需要的。
我当然知道我可以在返回 find 后过滤代码,但我不喜欢浪费内存。有没有办法可以使用猫鼬过滤文档中的数组项?
解决方案
这是您正在寻找的聚合:
db.collection.aggregate([
{
$match: {}
},
{
$project: {
name: true,
images: {
$filter: {
input: "$images",
as: "images",
cond: {
$eq: [
"$$images.active",
true
]
}
}
}
}
}
])
推荐阅读
- javascript - Webpack 找不到任何导入的模块
- node.js - 为什么Mongo数据库中的数据和我从flutter App输入的数据不一样?
- mqtt - mqtt 知道队列何时被处理?
- c++ - 在 Visual Studio 2019 中使用枚举作为模板参数时出现错误 C2440 和 C2973
- elasticsearch - 我可以从 Elasticsearch 中的嵌套键值中过滤文档吗?
- python - 在python中发送http请求的最快方法
- python - Python:替换整个json中嵌套的dict键的值,无论是在列表中还是直接在dict中
- wordpress - 当我调整第二个副本的设计时,wordpress 的重复副本会导致原始副本出现错误
- android - 从 Android 登录时,Google OAuth2 返回错误 10 或错误 12500
- java - 使用 TestNg 中的数据提供程序运行依赖于不同参数的并行测试方法