【问题标题】:Find in mongodb (search in the first 30 records)在mongodb中查找(搜索前30条记录)
【发布时间】:2015-07-17 21:55:26
【问题描述】:

如何在 30 个 mongo 文档中进行预约?

例如:

db.find (). count () = 100 documents //my base

我想要

db.find ({$ {and 'user.gender': 'Male'}, {'in first 30 records "}) = 5 documents

不是

db.find ({'user.gender': 'Male'}). limit (30) = 30 documents //I do not want it

【问题讨论】:

  • 您是否有用于对记录进行排序的字段,例如时间戳、整数 ID 或 smt?
  • yes 用户数据:注册日期、性别、身份证...
  • 你可以试试这样的db.find({'user.gender': 'Male'}).sort({'user.registrationdate':1}).limit(30);你可以使用-1进行降序排序。
  • 还是不是这个,想象一个数组(m, m, f, f, m, m) 我要前3条记录,只有items = f,total = 1前3条:项目 1 = m:不是项目 2 = m:不是项目 3 = F:是#项目 4 .... 忽略
  • 你的问题还不清楚。您能否向我们展示您的文档以及预期的输出?你也需要阅读这个stackoverflow.com/help/how-to-ask

标签: php mongodb mongodb-query


【解决方案1】:

您可以在mongodb 中使用$aggregate

例如

db.collName.aggregate([     
    { $limit: 30 },
    { $match: { 'user.gender': 'Male'} }
])

如果您想根据任何字段的基础对集合进行排序,您可以使用aggregation pipeline 中的$sort

另外请记住事实,“只要您没有明确排序,就不能保证您的文档会以任何特定的顺序被查询返回。新集合中的文档是通常按插入顺序返回,但各种因素可能会导致该顺序意外更改,因此请不要依赖它。

当您按_id 字段排序时,项目按创建日期返回。所以你也可以先sort_id再限制你的文件。

例如:

db.collName.aggregate([
        { $sort: { _id: 1 } },                 
        { $limit: 30 },
        { $match: { 'user.gender': 'Male'} }
    ])

说明:

它会首先根据文档中的_id字段sort你的文档,然后limit你的文档到30,然后根据查询在返回的文档上找到一个match

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 2017-06-12
    • 2011-08-17
    • 1970-01-01
    • 2015-01-15
    • 2020-02-09
    • 1970-01-01
    • 2018-09-02
    相关资源
    最近更新 更多