如何查询返回数组中符合 mongoose 条件的所有值?

我想返回数组中符合条件的所有值。

但是当我查询时,它只返回一个结果。

这是我的数据库的价值。

[{
    "channel": "a",
    "video": [
        {
            "name": 1
            "status": ''
        },
        {
            "name": 2
            "status": 'err'
        },
        {
            "name": 3
            "status": 'err'
        }
    ]
},
{
    "channel": "b",
    "video": [
        {
            "name": 4
            "status": 'err'
        },
        {
            "name": 5
            "status": 'err'
        },
        {
            "name": 6
            "status": ''
        }
    ]
}]

我想要这样的结果

[
{
    "channel": "a",
    "video": [
        {
            "name": 2
            "status": 'err'
        },
        {
            "name": 3
            "status": 'err'
        }
    ]
},
{
    "channel": "b",
    "video": [
        {
            "name": 4
            "status": 'err'
        },
        {
            "name": 5
            "status": 'err'
        }
    ]
}
]

但是当我使用我的代码时

var errData = await DB.find({
            'video.status' : { $in : 'err' }
        }, 
        {
            'channel': true,
            'video' : {
                $elemMatch : {
                    'status': { $in : 'err' }
                }
            }
        } )

它像这样返回

[
{
    "channel": "a",
    "video": [
        {
            "name": 2
            "status": 'err'
        }
    ]
},
{
    "channel": "b",
    "video": [
        {
            "name": 4
            "status": 'err'
        }
    ]
},
]

如何在猫鼬中修复它(不要使用聚合)?

如果不使用聚合是不可能的,我如何使用聚合来实现?

你能帮我吗?

杰夫

正如文档解释的那样:

$elemMatch 运算符将查询结果中的字段内容限制为仅包含与 $elemMatch 条件匹配的第一个元素

这就是为什么每个文档只能获得一个元素的原因。

此外,似乎(看这里)没有聚合是不可能的。

使用聚合,您可以这样使用$filter

db.collection.aggregate([
  {
    "$set": {
      "video": {
        "$filter": {
          "input": "$video",
          "as": "v",
          "cond": {"$eq": ["$$v.status","err"]}
        }
      }
    }
  }
])

示例在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Mongoose从集合中删除所有文档?

返回所有符合条件的字符串值

如何在Mongoose中更新数组值

如何计算数组中符合条件的所有对象?

仅当所有查询的所有值都符合条件时才更新行

如何在mongoDB或Mongoose中更新嵌套数组的值

在Mongoose中,如何找到与给定查询值匹配的数组字段的最后一个元素的所有文档?

如何从数组Mongoose输出值?

Mongoose中的条件查询,查询中带有整数

Excel 对符合三个条件的所有值求和

Mongoose 无法从数组中获取所有对象

从 MySQL 到 Mongoose:聚合文档,所有行中两个值的最大乘积

查询以动态查找 mongoose 中数组中的所有元素

基于用户类型的有条件返回值的构建节点 API(express、mongodb、mongoose)

Mongoose 从集合中获取所有键值并放入数组中

Mongoose从没有JS工作的对象数组中的对象值返回数组

如何在 Mongoose 中返回包含特定 ID 关系的所有文档?

检查 Mongoose (JavaScript) 中是否有符合特定条件的文档

Mongoose 获取多个文档数组中的所有元素

mongoose - 查询子文档中的数组值

如何有条件地在 Mongoose 的查询中包含/排除字段?

查询不返回所有值,还添加额外的 if 条件

如何在mongoose的查询中添加条件过滤器?

如何使用 Mongoose 查询过滤到在数组类型字段中具有指定值的文档?

MongoDB / Mongoose - 带有条件的 FindOneById。匹配数组内对象内数组的值

如何修改与 json 数组中的条件匹配的所有值?

Mongoose 返回包含属性内任何位置的值的所有文档

我无法替换 mongoose 返回的数组的值

Mongoose 数组中的值