我希望找到either
身份or
护照号码的用户。
我的收藏:
idNo passportNo Name
123456 Kelvin
567890 Andy
User.find({'$and':[{deleted: false}, {'$or': [{idNo: '123456'}, {passportNo: ''}]}]}
由于护照号码为空,它将检索所有记录。我只是想让它回归:
idNo passportNo Name
123456 Kelvin
答案 0 :(得分: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);
这就是我们所谓的“构建”查询,以及您最终想要做的事情。
答案 1 :(得分:0)
可能这就是你想要的
db.User.find({$or: [{idNo: 123123},{$and:[{passportNo:{$ne:''}},{passportNo:1232}]}]})
它可以处理mangodb本身的空值。没有检查程序,你可以传递idNo和护照号码。