MongoDB使用$ sort进行聚合而不是排序

时间:2015-06-29 17:14:18

标签: mongodb sorting

我正在进行MongoDB的课程,我正在进行第5周的第一次练习。第一个练习是让作者有更多的评论。

我做的第一件事就是检查数据的外观,然后开始编写查询,这就是我得到的内容:

// Set QueryOptions to prefetch our specific properties
var queryOptions = new Windows.Storage.Search.QueryOptions(CommonFileQuery.OrderByDate, null);
queryOptions.SetThumbnailPrefetch(ThumbnailMode.PicturesView, 100,
        ThumbnailOptions.ReturnOnlyIfCached);
queryOptions.SetPropertyPrefetch(PropertyPrefetchOptions.ImageProperties, 
       new string[] {"System.Size"});

StorageFileQueryResult queryResults = KnownFolders.PicturesLibrary.CreateFileQueryWithOptions(queryOptions);
IReadOnlyList<StorageFile> files = await queryResults.GetFilesAsync();


foreach (var file in files)
{
    ImageProperties imageProperties = await file.Properties.GetImagePropertiesAsync();

    // Do something with the date the image was taken.
    DateTimeOffset dateTaken = imageProperties.DateTaken;

    // Performance gains increase with the number of properties that are accessed.
    IDictionary<String, object> propertyResults =
        await file.Properties.RetrievePropertiesAsync(
              new string[] {"System.Size" });

    // Get/Set extra properties here
    var systemSize = propertyResults["System.Size"];

}

查询正常工作并正确计算注释数量,但当我尝试对结果进行排序时,它不起作用。我试图将db.posts.aggregatae([ { $unwind: "$comments" }, { $group: { _id: "$author", num_posts:{ $sum:1 } } }, { $sort: { "num_posts": -1 } } ]); 阶段更改为:

$group

但我收到错误:

    { $group: 
        { _id: "$author" },
        num_posts:{ $sum:1 }
    }

1 个答案:

答案 0 :(得分:0)

您的查询存在的问题是您是按不存在的密钥进行分组,您需要按评论进行分组。作者键获取作者(来自嵌入式注释子文档数组)的评论数量最多如下:

db.posts.aggregate([
    { "$unwind": "$comments"},
    {
        "$group": {
            "_id": "$comments.author", 
            "num_posts": { "$sum": 1 }
        }
    },
    { 
        "$sort": { "num_posts": -1 }
    },
    { "$limit": 1 }
]);