比如我现在有个表,结构分别为:
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 的查询方法直接实现呢?
可以通过 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 集合中。
A.aggregate([
{ $unwind: "$array" },
{
$project: {
_id: 0,
fid: "$id",
id: "$array.id"
}
}
]).then(data => {
console.log(data);
});
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不熟悉,因此不胜感激 问题答案: 当然,您的日志会返回:您在完成请求之前先进行日志。问题不是范围,而是 异步性 。 是异步的,这就是为什么它将回调作为参数的原因。做您在回调中要做的事情(传递给的):
问题内容: 我有字典。 如何将的所有值提取到列表中? 问题答案: 如果你只需要字典的键,和使用:。 如果你只需要在字典中的值,和使用:。 如果您想同时使用键和值,请使用:返回一个元组列表。