异常:无法从BSON类型EOO转换为Date

jsb*_*sht 28 date mongoose mongodb aggregation-framework

我遇到运行以下聚合查询的问题:

db.snippets.aggregate([ { '$project': { month: { '$month': '$created_at' }} } ])
Run Code Online (Sandbox Code Playgroud)

相同的错误消息是:

assert: command failed: {
        "errmsg" : "exception: can't convert from BSON type EOO to Date",
        "code" : 16006,
        "ok" : 0 } : aggregate failed
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题.我找到了一个相关的问题

相关的Stack Overflow问题

但它并没有说明如何完成任务.

Joh*_*yHK 58

您可能有一个或多个文档的created_at值不是BSON Date,您需要通过将这些值转换为Date或删除它来解决这个问题.

您可以$not通过使用$type运算符的查询找到那些文档:

db.snippets.find({created_at: {$not: {$type: 9}}})
Run Code Online (Sandbox Code Playgroud)

如果created_at值是日期字符串,您可以找到需要更新的文档,然后使用以下代码在shell中更新它们:

db.snippets.find({created_at: {$not: {$type: 9}}}).forEach(function(doc) {
    // Convert created_at to a Date 
    doc.created_at = new Date(doc.created_at);
    db.snippets.save(doc);
})
Run Code Online (Sandbox Code Playgroud)

  • 你做了我的一天男人.我被困了很长一段时间. (4认同)

小智 5

试试这个,它对我上面的问题有帮助。

db.snippets.aggregate([{
'$project': {
    month: { $substr: ["$created_at", 5, 2] }
}
 }]);
Run Code Online (Sandbox Code Playgroud)

上面的代码得到明智的月份

数据以 ISO 格式输入数据库,然后可以轻松处理。