gpt4 book ai didi

mongodb - Mongodb中的聚合查询返回特定字段

转载 作者:IT老高 更新时间:2023-10-28 13:19:49 25 4
gpt4 key购买 nike

文档样本:

{
"_id" : ObjectId("53329dfgg43771e49538b4567"),
"u" : {
"_id" : ObjectId("532a435gs4c771edb168c1bd7"),
"n" : "Salman khan",
"e" : "salman@gmail.com"
},
"ps" : 0,
"os" : 1,
"rs" : 0,
"cd" : 1395685800,
"ud" : 0
}

查询:

db.collectiontmp.aggregate([
{$match: {os:1}},
{$project : { name:{$toUpper:"$u.e"} , _id:0 } },
{$group: { _id: "$u._id",total: {$sum:1} }},
{$sort: {total: -1}}, { $limit: 10 }
]);

我需要上述查询中的以下内容:

  1. u._id
  2. 分组
  3. 从记录中返回记录总数和邮件,如下图:

    { “结果”: [ { “电子邮件”: ””, “全部的”: ”” }, { “电子邮件”: ””, “全部的”: ”” } ], “好的”: 1}

最佳答案

你在这里做错的第一件事是不理解 $project旨在工作。管道阶段,例如 $project$group只会输出“明确”标识的字段。因此,只有您说要输出的字段可用于以下管道阶段。

特别是在这里,您仅“投影”了文档中“u”字段的一部分,因此您删除了其他可用数据。现在这里唯一存在的字段是“名称”,这是您“投影”的字段。

也许你真的打算这样做:

db.collectiontmp.aggregate([
{ "$group": {
"_id": {
"_id": "$u._id",
"email": { "$toUpper": "$u.e" }
},
"total": { "$sum": 1 },
}},
{ "$project": {
"_id": 0,
"email": "$_id.email",
"total": 1
}},
{ "$sort": { "total": -1 } },
{ "$limit": 10 }
])

甚至:

db.collectiontmp.aggregate([
{ "$group": {
"_id": "$u._id",
"email": { "$first": { "$toUpper": "$u.e" } }
"total": { "$sum": 1 },
}},
{ "$project": {
"_id": 0,
"email": 1,
"total": 1
}},
{ "$sort": { "total": -1 } },
{ "$limit": 10 }
])

这为您提供了您正在寻找的那种输出。

请记住,由于这是一个“管道”,因此只有前一个阶段的“输出”可用于“下一个”阶段。文档没有“全局”概念,因为这不是 SQL 等声明性语句,而是“管道”。

所以想想 Unix 管道“|”命令,或以其他方式查找。那么你的想法就会落到实处。

关于mongodb - Mongodb中的聚合查询返回特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25419139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com