草庐IT

mongodb - Mongo - 将 null 或 undefined 字段视为特定值

coder 2023-11-03 原文

我有以下情况:

考虑一个包含以下文档的集合:

 [
   {
      '_id': ObjectId('somehting'),
      'date': null
   },
   {
      '_id': ObjectId('somehting'),
   },
   {
      '_id': ObjectId('somehting'),
      'date': '2015-01-01 12:12:12'
   },
   many others
 ]

现在我有以下查询查找日期介于值之间的文档 db.getCollection('validation_archive').find({'date': {$lte: '[date_here]', {$gte: '[date_here ]'}}});

一切正常,除了为空或不存在的字段。

我是否可以告诉 mongo 将 null 视为“0000-00-00 00:00:00”?

编辑:我需要这样做,所以如果 $gt 中发送的日期是 0000-00-00 00:00:00,查询将在结果中返回文档。

最佳答案

在一般查询中则没有。您始终可以将它们从结果中排除,如:

db.getCollection('validation_archive').find({
    "date": { "$lte": date_to, "$gte" date_from, "$ne": null }
})

或者您可以使用 .aggregate() 建议的“零”或“纪元”日期“包含”:

db.getCollection('validation_archive').aggregate([
    { "$redact": {
        "$cond": {
            "if": {
                "$and": [
                    { "$gte": [ date_from, { "$ifNull": [ "$date", new Date(0) ] } ] },
                    { "$lte": [ date_to, { "$ifNull": [ "$date", new Date(0) ] } ] }
                ]
            },
            "then": "$$KEEP",
            "else": "$$PRUNE"
        }
    }}
])

但在你所问的上下文中,我们将不得不问“有什么意义”。

或者即使你必须:

db.getCollection('validation_archive').aggregate([
    { "$project": {
        "date": { "$ifNull": [ "$date", new Date(0) ] }
    }},
    { "$match": {
        "$or": [
            { "date": { "$lte": date_to, "$gte" date_from } }, 
            { "date": { "$eq": Date(0) } }
        ]
    }}
])

这完全包含在结果中。

但话又说回来,为什么不这样做:

db.getCollection('validation_archive').find({
   "$or": [
        { "date": { "$lte": date_to, "$gte" date_from },
        { "date": null },
        { "date": { "$exists": false } }
   ]
})

效率更高。

因此可以将不存在的日期“转换”为日期,但简单地使用基本查询操作更有意义。

关于mongodb - Mongo - 将 null 或 undefined 字段视为特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32843675/

有关mongodb - Mongo - 将 null 或 undefined 字段视为特定值的更多相关文章

  1. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  2. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  3. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  4. ruby-on-rails - Rails 中的 NoMethodError::MailersController#preview undefined method `activation_token=' for nil:NilClass - 2

    似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai

  5. "\0"null 的 Ruby 测试? - 2

    我在破坏脚本的字符串中出现了一些奇怪的字符。据我所知,通过putbadstring到控制台,它们是"\0\0\0\0"。我想对此进行测试,以便我可以忽略它们...但是如何呢?以为这就是blank?和empty?的用途?!?:>badstring="\0"=>"\u0000">badstring.blank?NoMethodError:undefinedmethod`blank?'for"\u0000":Stringfrom(irb):97from/Users/meltemi/.rvm/rubies/ruby-2.0.0-p195/bin/irb:16:in`'>badstring.em

  6. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

  7. ruby-on-rails - Sphinx - 何时对字段使用 'has' 和 'indexes' - 2

    我几天前在我的ruby​​onrails2.3.2上安装了Sphinx和Thinking-Sphinx,基本搜索效果很好。这意味着,没有任何条件。现在,我想用一些条件过滤搜索。我有公告模型,索引如下所示:define_indexdoindexestitle,:as=>:title,:sortable=>trueindexesdescription,:as=>:description,:sortable=>trueend也许我错了,但我注意到只有当我将:sortable=>true语法添加到这些属性时,我才能将它们用作搜索条件。否则它找不到任何东西。现在,我还在使用acts_as_tag

  8. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  9. ruby-on-rails - 如何为空白字段编写 rspec? [Rails3.1] - 2

    我使用rails3.1+rspec和factorygirl。我对必填字段(validates_presence_of)的验证工作正常。我如何让测试将该事实用作“成功”而不是“失败”规范是:describe"Addanindustrywithnoname"docontext"Unabletocreatearecordwhenthenameisblank"dosubjectdoind=Factory.create(:industry_name_blank)endit{shouldbe_invalid}endend但是我失败了:Failures:1)Addanindustrywithnona

  10. ruby - "undefined method"用于 rails 模型 - 2

    我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom

随机推荐