相关疑难解决方法(0)

从文档中的子数组中查找最高值

假设我有以下集合:

{ _id: 1, Array: [
  { K: "A", V: 8 },
  { K: "B", V: 5 },
  { K: "C", V: 13 } ] }

{ _id: 2, Array: [
  { K: "D", V: 12 },
  { K: "E", V: 14 },
  { K: "F", V: 2 } ] }
Run Code Online (Sandbox Code Playgroud)

我想运行一个返回具有最高"V"的子文档的查询,所以在这种情况下我会得到:

{ _id: 1, Array: [ { K: "E", V: 14 } ] }
Run Code Online (Sandbox Code Playgroud)

或者干脆:

{ K: "E", V: 14 }
Run Code Online (Sandbox Code Playgroud)

重要的是我希望Mongo服务器上的内存使用量为O(1)(无论我处理多少文档,内存使用量是不变的),我只想检索那个我需要的值的子文档(我不想下载超过必要的更多子文档).

我首选的方法是使用简单的查找查询,但我不确定这是否可行.我怀疑这也可以通过聚合框架(或map reduce?)来完成,但是看不出来.我不希望结果存储在临时集合中,而是直接返回给我的客户端(就像普通查询一样).

mongodb aggregation-framework

9
推荐指数
1
解决办法
6983
查看次数

MongoDB在文档数组中按最大值查找

给出一个包含以下文档的集合:

{
    "host" : "example.com",
    "ips" : [
        {
            "ip" : NumberLong("1111111111"),
            "timestamp" : NumberLong(1373970044)
        },
        {
            "ip" : NumberLong("2222222222"),
            "timestamp" : NumberLong(1234978746)
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我需要与X的IP值返回所有文件,但只有当X相关的时间戳是最高的IPS阵列中的时间戳(所以上面的例子中文件应该匹配"2222222222"的搜索,因为这是没有的IP最近的时间戳).

这是我第一次在MongoDB中做了一些非常基本的东西,所以我能得到的最接近的是:

coll.aggregate({$ match:{"ips.ip":X}},{$ group:{"_ id":"$ host","max":{$ max:"$ ips.timestamp"}}} {$排序:{ "ips.timestamp": - 1}})导致

这显然没有给我我正在寻找的东西,它返回任何ips.ip值为X.如果X的关联时间戳是该ips数组的最高值,我怎么才返回ip.ip为X的文件?

mongodb

7
推荐指数
1
解决办法
5289
查看次数

标签 统计

mongodb ×2

aggregation-framework ×1