【问题标题】:select or empty from collection从集合中选择或清空
【发布时间】:2015-03-18 17:07:27
【问题描述】:

我想找一个either id or 护照号码的用户。

我的收藏:

idNo    passportNo     Name
123456                 Kelvin
567890                 Andy

User.find({'$and':[{deleted: false}, {'$or': [{idNo: '123456'}, {passportNo: ''}]}]}

由于护照号码为空,所以会检索所有记录。我只希望它返回:

idNo    passportNo     Name
123456                 Kelvin

【问题讨论】:

    标签: mongodb mongoose mongodb-query


    【解决方案1】:

    我认为您的意思是$exists,只要该字段存在于文档中,它就会返回:

    User.find({
        "deleted": false,
        "$or": [
            { "idNo": "123456" },
            { "passportNo": { "$exists": true } }
        ]
    })
    

    如果您的文档实际上“没有”任何形式的字段,那么情况正好相反:

            { "passportNo": { "$exists": false } }
    

    此外,所有查询参数都是隐含的“与”条件。只需要在同一字段上查询多个条件时才需要操作符。


    一般来说,您的示例不是很清楚,并且还缺少“已删除”字段。假设它确实存在,那么您可能根本不想要 $or 代码,而只是:

    User.find({
        "deleted": false,
        "idNo": "123456",
        "passportNo": { "$exists": false }
    })
    

    或者只是:

    User.find({
        "deleted": false,
        "idNo": "123456",
    })
    

    所以就你的问题的标题而言,这真的没有意义


    看来你没有问你真正想说的问题。如果您正在处理表单输入之类的内容,那么您可以根据提供的内容“构建”查询。

    在 JavaScript 上下文中,您可能正在使用 express,因此您最终会得到如下内容:

    var query = {
        "deleted": false
    };
    
    if ( req.params.idNo != '' )
        query.idNo = req.params.idNo;
    
    if ( req.params.passportNo != '' )
        query.passportNo = req.params.passportNo;
    
    User.find(query);
    

    这就是我们“构建”查询的意思,以及您最终似乎想要做的事情。

    【讨论】:

    • 我只想让它返回 123456 Kelvin
    • @KevFixx 您可能混淆了您的术语。查看修改
    • 可以搜索身份证或护照。
    • @KevFixx 你需要比你更彻底地解释,也许还要考虑逻辑。如果“IdNo”与您想要的项目不匹配,那么为什么“空白”“护照”字段只匹配该记录?想想看。我相信我已经向您展示了与您真正要求的内容相匹配的所有内容。如果你的想法不同,那么在你的问题中表明你认为事情是如何运作的。为什么我只知道你会说“我希望它成为第一个!”
    • 尼尔,谢谢你帮助我。我想要的只是简单,但我做不到。所有我想要的用户都可以使用号码或护照号码进行搜索,他们可以将护照留空。在mongo数据库中,passport也可以为空。
    【解决方案2】:

    也许这就是你想要的

     db.User.find({$or: [{idNo: 123123},{$and:[{passportNo:{$ne:''}},{passportNo:1232}]}]})
    

    它可以处理 mangodb 本身的空值。您可以通过 idNo 和 passport no 而无需在程序中检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 2011-05-28
      • 2011-08-31
      相关资源
      最近更新 更多