当前位置: 首页 > 知识库问答 >
问题:

node.js - mongodb 如何从所有数据中提取某一项?

方浩旷
2023-05-24

比如我现在有个表,结构分别为:

A = [{
    id: 1,
    array: [{id: 11}, {id: 12}]
}, {
    id: 2,
    array: [{id: 21}, {id: 22}]
}, {
    id: 3,
    array: [{id: 31}, {id: 32}]
}]

我想得到的格式为:

A = [{
    fid:1, id: 11
}, {
    fid:1, id: 12
}, {
    fid:2, id: 21
}, {
    fid:2, id: 22
}, {
    fid:3, id: 31
}, {
    fid:3, id: 32
}]

我现在能想到的办法是

A.find().then(data => {
    let B = []
    data.forEach(item => {
        item.array.forEach(it => {
            B.push({
                fid: item.id,
                id: it.id
            })
        })
    })
})

但真的觉得这么些太笨了,想是否能通过 mongoose 的查询方法直接实现呢?

共有3个答案

方恺
2023-05-24

可以通过 MongoDB 的聚合查询来实现。

首先,需要使用 $unwind 操作符将 array 数组拆分成单个文档,然后使用 $project 操作符仅保留所需的字段。最后,使用 $addFields 操作符为每个文档添加一个新字段 fid,表示原始文档的 id 值。

以下是具体的聚合查询示例:

Model.aggregate([
  { $unwind: "$array" },
  { $project: { _id: 0, fid: "$id", id: "$array.id" } },
  { $addFields: { fid: { $toInt: "$fid" } } } // 可选,将 fid 转换为数字类型
])

注意,这个查询返回的结果是一个数组,可以直接用于后续的操作,如保存到另一个 MongoDB 集合中。

孔皓
2023-05-24
A.aggregate([
    { $unwind: "$array" },
    {
        $project: {
            _id: 0,
            fid: "$id",
            id: "$array.id"
        }
    }
]).then(data => {
    console.log(data);
});
顾泰平
2023-05-24
mongoModel.aggregate([{
    $unwind: "$array"
}]).then(data => {
    console.log(111, data)
})
 类似资料:
  • 问题内容: 我试图在以下位置找到针对此问题的解决方案:http : //mongodb.github.io/node-mongodb-native/ 但是,我找不到从Node.js应用程序列出所有可用的MongoDB数据库的解决方案。 问题答案: 使用。

  • 我想通过“id”从我的mongodb获取数据。如果我的id与mongodb中id的值匹配,则它将获取该对象,但其抛出错误为: {“message”:“对于模型“PostMessage”“”的路径“\u id”处的值“s-CoAhDKd”,转换为ObjectId失败}

  • 问题内容: 您可以使用coeff()获得特定项的系数; 在这里,我想提取x,x ** 2(等等)的所有系数,例如; 有一个方法as_coefficients_dict(),但是这似乎不符合我想要的方式。 问题答案: 最简单的方法是使用

  • 我有一个带有此模式的数据库: 我测试了这段代码,但我无法从数据库中获得任何消息。我会感谢你的帮助。

  • 问题内容: 我正在尝试让我的函数返回http get请求,但是,无论如何,它似乎在?scope中丢失了。我对Node.js不熟悉,因此不胜感激 问题答案: 当然,您的日志会返回:您在完成请求之前先进行日志。问题不是范围,而是 异步性 。 是异步的,这就是为什么它将回调作为参数的原因。做您在回调中要做的事情(传递给的):

  • 问题内容: 我有字典。 如何将的所有值提取到列表中? 问题答案: 如果你只需要字典的键,和使用:。 如果你只需要在字典中的值,和使用:。 如果您想同时使用键和值,请使用:返回一个元组列表。