Mongodb MongDB:从嵌套文档中提取动态键、值对的查询
下面给出的是我的数据结构,我需要提取“发布者”动态键,并将($lookup)与另一个集合进行比较以匹配记录,求和%值Mongodb MongDB:从嵌套文档中提取动态键、值对的查询,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,下面给出的是我的数据结构,我需要提取“发布者”动态键,并将($lookup)与另一个集合进行比较以匹配记录,求和%值 "_id" : ObjectId("5eff1e9a9bb60729d3278140"), "tracks" : [ { "_id" : ObjectId("5efd9548327f5509b009b5a9"),
"_id" : ObjectId("5eff1e9a9bb60729d3278140"),
"tracks" : [
{
"_id" : ObjectId("5efd9548327f5509b009b5a9"),
"artist" : ["abc"],
"genre" : "Pop",
"publishers" : {
"a" : "30.00%",
"b" : "30.00%",
"c" : "30.00%",
"d" : "10.00%"
},
"__v" : 0
}
您可以使用此聚合管道。它会将发布者数组中的动态键转换为以下形式的对象,然后您可以轻松地应用
$lookup
阶段
{
"_id": ObjectId("5eff1e9a9bb60729d3278140"),
"percentage": 30,
"publisher": "b"
}
更新示例
首先非常感谢您的回复,我能够得到预期的结果。我可以再与您确认一件事吗,请在此处找到我的查询“”,并向我建议,这是推荐的方法吗?在看到上面的数据库结构后,我添加了另一个示例。您可以根据需要修改此查询。感谢您提供的示例,看起来您已经更改了给定的数据结构,它适用于您的数据结构,而不是我的数据结构。请查找实际结构,并希望将结果集作为包含总贡献(每个匹配发布者百分比的总和)和指标标志true/false(true=100%,false 100%)的跟踪详细信息。完整的数据结构:“这完全偏离了实际问题本身,您需要发布另一个问题并解释您想要实现的目标。实际问题已经发布,给定的解决方案与提供的数据结构不同,因此,我试图得到解决方案,使其能够与四个单独的集合而不是单个嵌套集合一起工作,请给出建议。
db.collection.aggregate([
{
$unwind: "$tracks"
},
{
$project: {
publisher: {
$objectToArray: "$tracks.publishers"
}
}
},
{
$unwind: "$publisher"
},
{
$project: {
publisher: "$publisher.k",
percentage: {
$convert: {
input: {
$trim: {
input: "$publisher.v",
chars: "%"
}
},
to: "double"
}
}
}
}
])