如何只返回第一次出现的ID与猫鼬?

Fizzix

我有一个名为的大型收藏Messages,如下所示:

{
   user: 94fg844f,
   event: null,
   group: null,
   name: "Jake",
   text: "Hello world"
}, {
   user: fje93jrg4,
   event: null,
   group: null,
   name: "Bob"
   text: "Testing"
}, {
   user: fje93jrg4,
   event: null,
   group: null,
   name: "Bob"
   text: "Text here"
}, {
   user: null,
   event: d0j3n9fn3,
   group: null,
   name: "My Event"
   text: "Testing 2"
}, {
   user: null,
   event: d0j3n9fn3,
   group: null,
   name: "My Event"
   text: "Another text"
}

我需要首先出现用户,事件和组。

例如,由于用户fje93jrg4发生两次,我只是想用文本文件回Testing,因为一个与文字Text here是比它年长。event也是如此d0j3n9fn3尽管我只想用的文本取回它的第一个文档,但它发生了两次Testing 2

我看着distinct虽然它似乎只支持一个搜索词,像user代替的usereventgroup

以上的最终结果将是:

{
   user: 94fg844f,
   event: null,
   group: null,
   name: "Jake",
   text: "Hello world"
}, {
   user: fje93jrg4,
   event: null,
   group: null,
   name: "Bob"
   text: "Testing"
}, , {
   user: null,
   event: d0j3n9fn3,
   group: null,
   name: "My Event"
   text: "Testing 2"
}

我的猜测是,我可能不得不在这些行中使用aggregatewith$first或之类的东西。进行3个不同查询的问题是我需要应用一个限制,以便总能获得10个结果。例如,group混合中可能没有最近的s,而只有events和users。

苯乙烯

我们可以使用聚合框架来做到这一点。首先,我们需要$sortbyuser和“ _id”。然后$group从那里开始,由“用户”使用$last累加器运算符返回每个用户的最后一个文档。请注意,$first如果我们以降序对文档进行排序,但是以升序进行排序并使用$last我们的意图,则也可以使用累加器运算符

db.collection.aggregate([
    { "$sort": { "user": 1, "_id": -1 } }, 
    { "$group": { 
        "_id": "$user", 
        "user": { "$last": "$$ROOT" } 
    }} 
])

产生:

{
    "_id" : "fje93jrg4",
    "user" : {
        "_id" : 2,
        "user" : "fje93jrg4",
        "event" : null,
        "group" : null,
        "name" : "Bob",
        "text" : "Testing"
    }
}
{
    "_id" : "94fg844f",
    "user" : {
        "_id" : 1,
        "user" : "94fg844f",
        "event" : null,
        "group" : null,
        "name" : "Jake",
        "text" : "Hello world"
    }
}
{
    "_id" : null,
    "user" : {
        "_id" : 4,
        "user" : null,
        "event" : "d0j3n9fn3",
        "group" : null,
        "name" : "My Event",
        "text" : "Testing 2"
    }
}

我们可能想在$project管道中添加一个,但是这样做会导致性能下降。但是,如果不需要返回的文档中的所有键/值对,它将减少通过网络发送的数据量以及用于解码客户端文档的时间和内存。

$project阶段是这样的:

{ "$project": {
    "_id": "$user._id",
    "user": "$user.user",
    "event": "$user.event",
    "group": "$user.group",
    "name": "$user.name",
    "text": "$user.text"
}}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何只返回第一次出现的ID与猫鼬?

来自分类Dev

Jquery如何只找到第一次出现

来自分类Dev

QString只替换第一次出现

来自分类Dev

只替换第一次出现的单词

来自分类Dev

如何只匹配行中第一次出现的空间

来自分类Dev

save()被调用一次,但是第一次在猫鼬中执行两次

来自分类Dev

猫鼬模式检查是否第一次保存了模型实例

来自分类Dev

文档只更新一次。猫鼬

来自分类Dev

正则表达式只正确地拉第一次出现

来自分类Dev

Swift Scroll to UITextField 通过 UiscrollView 只在第一次出现错误

来自分类Dev

使用python只更新队列中第一次出现的对象而不会中断

来自分类Dev

Jquery:只选择树中第一次出现的类

来自分类Dev

正则表达式只捕获括号内的第一次出现

来自分类Dev

如何在两个模式中选择“第一次出现”,包括“第一次”?

来自分类Dev

猫鼬分页-第一次查询限制为1,随后的查询限制为10

来自分类Dev

jQuery的焦点行事奇怪,只在第一次

来自分类Dev

我循环只经过第一次迭代

来自分类Dev

jQuery draggable - 只记住第一次拖动

来自分类Dev

findOneAndUpdate 在猫鼬中,$inc 第一次失败,然后在下一次尝试中工作

来自分类Dev

字符串数组:搜索文本,返回第一次出现的行号

来自分类Dev

MySQL:返回第一次出现或按日期记录

来自分类Dev

(SQL Server)第一次出现“字符”后返回子字符串值

来自分类Dev

为什么setTimeout()第一次只运行一次我的代码?

来自分类Dev

第一次输入时只生成一次随机数

来自分类Dev

如何在第一次出现的一对字符串之间打印文本?

来自分类Dev

如何使用powerscript提取一个值的第一次出现

来自分类Dev

动画仅在WPF中第一次出现

来自分类Dev

使用setInterval第一次出现

来自分类Dev

第一次出现的变量有值吗?

Related 相关文章

  1. 1

    如何只返回第一次出现的ID与猫鼬?

  2. 2

    Jquery如何只找到第一次出现

  3. 3

    QString只替换第一次出现

  4. 4

    只替换第一次出现的单词

  5. 5

    如何只匹配行中第一次出现的空间

  6. 6

    save()被调用一次,但是第一次在猫鼬中执行两次

  7. 7

    猫鼬模式检查是否第一次保存了模型实例

  8. 8

    文档只更新一次。猫鼬

  9. 9

    正则表达式只正确地拉第一次出现

  10. 10

    Swift Scroll to UITextField 通过 UiscrollView 只在第一次出现错误

  11. 11

    使用python只更新队列中第一次出现的对象而不会中断

  12. 12

    Jquery:只选择树中第一次出现的类

  13. 13

    正则表达式只捕获括号内的第一次出现

  14. 14

    如何在两个模式中选择“第一次出现”,包括“第一次”?

  15. 15

    猫鼬分页-第一次查询限制为1,随后的查询限制为10

  16. 16

    jQuery的焦点行事奇怪,只在第一次

  17. 17

    我循环只经过第一次迭代

  18. 18

    jQuery draggable - 只记住第一次拖动

  19. 19

    findOneAndUpdate 在猫鼬中,$inc 第一次失败,然后在下一次尝试中工作

  20. 20

    字符串数组:搜索文本,返回第一次出现的行号

  21. 21

    MySQL:返回第一次出现或按日期记录

  22. 22

    (SQL Server)第一次出现“字符”后返回子字符串值

  23. 23

    为什么setTimeout()第一次只运行一次我的代码?

  24. 24

    第一次输入时只生成一次随机数

  25. 25

    如何在第一次出现的一对字符串之间打印文本?

  26. 26

    如何使用powerscript提取一个值的第一次出现

  27. 27

    动画仅在WPF中第一次出现

  28. 28

    使用setInterval第一次出现

  29. 29

    第一次出现的变量有值吗?

热门标签

归档