select 或从 collection 中清空
select or empty from collection
我想查找 ID 为 either
or
护照号码的用户。
我的collection:
idNo passportNo Name
123456 Kelvin
567890 Andy
User.find({'$and':[{deleted: false}, {'$or': [{idNo: '123456'}, {passportNo: ''}]}]}
由于护照号码是空的,它会检索所有记录。我只想 return:
idNo passportNo Name
123456 Kelvin
我想你的意思是 $exists
,只要文档中存在该字段,它就会 return:
User.find({
"deleted": false,
"$or": [
{ "idNo": "123456" },
{ "passportNo": { "$exists": true } }
]
})
如果您的文档实际上 "do not" 具有任何形式的字段,则恰恰相反:
{ "passportNo": { "$exists": false } }
此外,所有查询参数都是隐含的 "and" 条件。只在同一个字段查询多个条件时才需要运算符。
总的来说,你的例子不是很清楚,也缺少 "deleted" 字段。假设它确实存在,那么您可能根本不需要 $or
条件,而只是:
User.find({
"deleted": false,
"idNo": "123456",
"passportNo": { "$exists": false }
})
或者只是:
User.find({
"deleted": false,
"idNo": "123456",
})
所以就你的问题标题而言确实没有意义
看来你没有问你真正想问的问题。如果您正在处理类似表单输入的内容,那么您 "build" 根据提供的内容进行查询。
在 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);
这就是我们所说的 "building" 查询的意思,以及您最终似乎想要做的事情。
可能这就是你想要的
db.User.find({$or: [{idNo: 123123},{$and:[{passportNo:{$ne:''}},{passportNo:1232}]}]})
它可以处理 mangodb 本身的空值。您可以在不检查程序的情况下通过 idNo 和 passport no。
我想查找 ID 为 either
or
护照号码的用户。
我的collection:
idNo passportNo Name
123456 Kelvin
567890 Andy
User.find({'$and':[{deleted: false}, {'$or': [{idNo: '123456'}, {passportNo: ''}]}]}
由于护照号码是空的,它会检索所有记录。我只想 return:
idNo passportNo Name
123456 Kelvin
我想你的意思是 $exists
,只要文档中存在该字段,它就会 return:
User.find({
"deleted": false,
"$or": [
{ "idNo": "123456" },
{ "passportNo": { "$exists": true } }
]
})
如果您的文档实际上 "do not" 具有任何形式的字段,则恰恰相反:
{ "passportNo": { "$exists": false } }
此外,所有查询参数都是隐含的 "and" 条件。只在同一个字段查询多个条件时才需要运算符。
总的来说,你的例子不是很清楚,也缺少 "deleted" 字段。假设它确实存在,那么您可能根本不需要 $or
条件,而只是:
User.find({
"deleted": false,
"idNo": "123456",
"passportNo": { "$exists": false }
})
或者只是:
User.find({
"deleted": false,
"idNo": "123456",
})
所以就你的问题标题而言确实没有意义
看来你没有问你真正想问的问题。如果您正在处理类似表单输入的内容,那么您 "build" 根据提供的内容进行查询。
在 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);
这就是我们所说的 "building" 查询的意思,以及您最终似乎想要做的事情。
可能这就是你想要的
db.User.find({$or: [{idNo: 123123},{$and:[{passportNo:{$ne:''}},{passportNo:1232}]}]})
它可以处理 mangodb 本身的空值。您可以在不检查程序的情况下通过 idNo 和 passport no。