【发布时间】:2016-04-20 10:58:33
【问题描述】:
这是我的示例文档:
{
updated: [
1461062102,
1461062316
],
name: "test1",
etc: "etc"
}
{
updated: [
1460965492,
1461060275
],
name: "test2",
etc: "etc"
}
{
updated: [
1461084505
],
name: "test3",
etc: "etc"
}
{
updated: [
1461060430
],
name: "test4",
etc: "etc"
}
{
updated: [
1460965715,
1461060998
],
name: "test5",
etc: "etc"
}
在$gte 和$lte 条件内获取与更新日期匹配的所有文档的 find 查询的正确用法是什么?
例如
db.test.find({'updated':{$elemMatch:{$gte:1461013201,$lte:1461099599}}})
我可以使用 $or 并将其设置为 updated.0:{$gte:1461013201,$lte:1461099599}、update.1:{$gte:1461013201,$lte:1461099599} 等,但如果我的数组包含更多更新日期怎么办?
据我了解,$elemMatch 不符合我的标准,因为它只匹配数组中的第一次出现。
【问题讨论】:
-
你用 map reduce 试过了吗?
-
@bartektartanus
mapReduce在几乎所有方面都是聚合框架的“差劲”表亲。如今,它的主要用途是用于糟糕的文档结构,在这种情况下,您别无选择,只能使用 JavaScript 处理进行元素遍历。您几乎总是希望使用原生运算符而不是 JavaScript 处理。 -
不幸的是,我知道“又差又慢”的 map reduce。但正如你所说 - 有时是唯一的选择。很高兴你找到另一个聚合 :)
标签: mongodb mongodb-query aggregation-framework