首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找所有文档,但如果某些文档具有相同的值,则获取最新的文档

查找所有文档,但如果某些文档具有相同的值,则获取最新的文档
EN

Stack Overflow用户
提问于 2017-02-23 12:28:23
回答 1查看 36关注 0票数 1

我将尝试用样本数据来解释。用户可以进行任意数量的评论,但我只想返回审阅者的最新评论。

代码语言:javascript
复制
{   
    id : 1
    name : "John",
    review : "only one review"
    dateCreated : 2017-02-23 02:35:11.420Z
}
{   
    id : 3
    name : "Sam"
    review : "second entered"
    dateCreated : 2017-02-23 02:41:42.300Z
}
{   
    id : 2
    name : "Sam",
    review : "fist enterd"
    dateCreated : 2017-02-23 02:36:32.150Z
}

.find()应该返回id为1和id为3的文档,因为只有一个文档是由John制作的,而id为3的文档是Sam制作的最后一个文档。

有关于这个的查询吗?

我的实际项目更加困难,因为我使用的是userIdanonId,而不是name。这些字段的值是对象Ids。最复杂的部分是,一个文档不能同时包含这两个部分。它包含userIdanonId

所以我想我可能需要一个or条件。anonId或userId

也许你也可以在这方面给我一些想法。

编辑:

我的实际数据看起来更像这样。它更复杂。

代码语言:javascript
复制
{
    anonId : ObjectId("58ae4f934a7d2b2490e8f99c")
    review : review made by an anoymous user
    dateCreated : 2017-02-23 02:35:11.420Z
}
{
    anonId : ObjectId("58ae4f934a7d2b2490e8f99c")
    review : second review made by anonymous user
    dateCreated : 2017-02-23 05:35:11.420Z
}
{
    userId : ObjectId("58ae4a5f4a7d2b2490e8f996")
    review : first review made by authenticated user
    dateCreated : 2017-02-22 05:35:11.420Z
}
{
    userId : ObjectId("58ae4a5f4a7d2b2490e8f996")
    review : second review made by authenticated user
    dateCreated : 2017-02-25 05:35:11.420Z
}

{
    userId : ObjectId("58ae5fc7a467cf23947833c8")
    review : This will be returened because no other review has this userID
    dateCreated : 2017-02-25 05:35:11.420Z
}
EN

回答 1

Stack Overflow用户

发布于 2017-02-23 12:42:12

您可以通过userIdanonIddateCreated$group上执行降序$sort

代码语言:javascript
复制
db.test.aggregate([{
    $sort: {
        "dateCreated": -1
    }
}, {
    $project: {
        ref: {
            $cond: {
                if: { $gt: ["$userId", null] },
                then: "$userId",
                else: "$anonId"
            }
        },
        document: "$$ROOT"
    }
}, {
    $group: {
        _id: "$ref",
        document: {
            "$first": "$document"
        }
    }
}])

请注意,$project阶段中使用的条件是检查userId是否存在,或者将ref设置为anonId

Here是一个要点

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42407060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档