MongoDB elemMatch 和日期字段的结果不正确

标签 mongodb mongodb-query

我有以下文件

{
    "_id" : ObjectId("52da43cd6f0a61e8a5059aaf"),
    "assignments" : [
        {
            "project" : "abc",
            "start" : ISODate("2012-12-31T18:30:00Z"),
            "end" : ISODate("2013-06-29T18:30:00Z")
        },
        {
            "project" : "efg",
            "start" : ISODate("2013-06-30T18:30:00Z"),
            "end" : ISODate("2014-03-30T18:30:00Z")
        }
    ],
    "eid" : "123",
    "name" : "n1",
    "uid" : "u1"
}

我正在尝试使用以下查询查找在特定日期之后开始的所有作业。但返回的数据很困惑,看起来不正确。请帮助我理解我做错了什么。

> db.test.find( {uid:'u1'},{ assignments: { $elemMatch: {end: {$gte: new Date(2011,5,1) } } }} ).pretty();
{
    "_id" : ObjectId("52da43cd6f0a61e8a5059aaf"),
    "assignments" : [
        {
            "project" : "abc",
            "start" : ISODate("2012-12-31T18:30:00Z"),
            "end" : ISODate("2013-06-29T18:30:00Z")
        }
    ]
}

它应该返回这两个项目吗?

最佳答案

$elemMatch operator将结果限制为每个文档的第一个匹配数组元素。

如果你想返回所有匹配的数组元素,你可以使用 Aggregation Framework :

db.courses.aggregate(
    // Find matching documents (would benefit from an index on `{uid: 1}`)
    { $match : {
        uid:'u1'
    }},

    // Unpack the assignments array
    { $unwind : "$assignments" },

    // Find the assignments ending after given date
    { $match : {
        "assignments.end": { $gte: ISODate("2011-05-01") }
    }}
)

关于MongoDB elemMatch 和日期字段的结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202613/

相关文章:

mongodb - 使用 mgo 检索嵌套文档

java - 如何在不使用模式匹配的情况下使用 java api 查询 “like” 的 mongodb?

mongodb - 在 MongoDB 聚合期间拆分字符串

c# - Find 和 FindAsync 之间的区别

MongoDB Java 驱动程序创建数据库和集合

mongodb - 如何在 MongoDB 中以升序/降序显示所有数据库及其大小

database - MongoDb 可线性化读取关注限制

mongodb - 有什么方法可以使用 mongoose 从 mongodb 的批量操作中获取修改后的 IDS?

javascript - 显示 _id 的转换错误,但 id 从未使用过 Node js

MongoDB:如何对另一个查询(嵌套查询)的结果执行查询?