这是我的数据结构.
[{
"name": "David",
"lastname": "",
},
{
"name": "Angela"
}]
Run Code Online (Sandbox Code Playgroud)
"姓氏"有时存在,有时不存在,有时则为"".
我想获得所有姓氏不等于""的行.但这不起作用.当lastname为""并且lastname完全不存在时,它返回两行.在上面的例子中,我想只获取David节点.
db.collection.find( {"lastname": {"$ne": ""}} )
Run Code Online (Sandbox Code Playgroud)
Kyl*_*yle 85
db.collection.find({"lastname" : {"$exists" : true, "$ne" : ""}})
Run Code Online (Sandbox Code Playgroud)
在mongo shell中(id省略以节省空间)
> db.collection.find()
{ "name" : "Angela" }
{ "name" : "David", "lastname" : "" }
{ "name" : "Kyle", "lastname" : "Test" }
{ "name" : "John", "lastname" : null }
> db.collection.find({"lastname" : {"$exists" : true, "$ne" : ""}})
{ "name" : "Kyle", "lastname" : "Test" }
{ "name" : "John", "lastname" : null }
Run Code Online (Sandbox Code Playgroud)
如果您还希望过滤掉空值匹配,则需要按如下方式调整条件(我们也可以将$ exists除去为"$ ne":null处理此问题)
> db.collection.find({$and:[{"lastname": {"$ne": null}}, {"lastname": {"$ne": ""}}]})
{ "name" : "Kyle", "lastname" : "Test" }
Run Code Online (Sandbox Code Playgroud)
小智 7
面对这个问题,我想到了另一个解决方案:
db.collection.find({"lastname": {"$gte": " "}})
Run Code Online (Sandbox Code Playgroud)
有了这个,我只能得到非空字符串,也忽略空和不存在的字段,因为任何可打印值 (ASCII) 都比空格 (32) 具有更大的值。
https://en.wikipedia.org/wiki/ASCII
| 归档时间: |
|
| 查看次数: |
42839 次 |
| 最近记录: |