使用Mongo Shell和Java驱动程序检查MongoDB文档是否存在的示例
时间:2020-02-23 14:40:49 来源:igfitidea点击:
这将检查文档中指定集合中是否存在字段。
语法是
{ field: { $exists: <boolean> } }
运算符接受布尔值true或者false。
如果布尔值设置为true,则exist操作符将匹配包含输入参数中指定的字段的文档。
如果boolean选项设置为false,则查询将返回不包含该字段的文档。
我们来看一下存在运算符的用法示例。
Exists运算符设置为true
此操作仅返回包含查询中指定的字段的文档。
>db.car.find({ regno:{ $exists:true}})
{ "_id" : 51, "name" : "NissanSunny", "cno" : "H678", "regno" : 141, "speed" : 25 }
{ "_id" : 52, "name" : "Fiat", "cno" : "H679", "regno" : 142, "speed" : 57 }
当存在设置为true时,将获取具有regno字段的文档。
将Exists运算符设置为true,并指定判断标准
此操作仅返回满足输入条件并包含查询中指定字段的文档。
>db.car.find({ speed:{ $exists:true , $gt:80 }})
{ "_id" : ObjectId("5474896b93f400069d439c04"), "name" : "Micra", "color" : "Lime", "cno" : "H186", "mfdcountry" : "Ethopia", "speed" : 84 }
{ "_id" : ObjectId("5474896b93f400069d439c03"), "name" : "Palio", "color" : "Purple", "cno" : "H183", "mfdcountry" : "Venice", "speed" : 82 }
从集合中检索速度字段和速度大于80的文档。
Exists运算符设置为false
这将检索不包含查询中指定的字段的文档。
>db.car.find( { mfdcountry: { $exists:false}})
{ "_id" : 8, "name" : "Zen", "speed" : 54 }
{ "_id" : ObjectId("5474896b93f400069d439c00"), "name" : "Indica", "color" : "Silver", "cno" : "H154" }
{ "_id" : 43, "name" : "Astar", "speed" : 79 }
{ "_id" : 51, "name" : "NissanSunny", "cno" : "H678", "regno" : 141, "speed" : 25 }
{ "_id" : 52, "name" : "Fiat", "cno" : "H679", "regno" : 142, "speed" : 57 }
{ "_id" : 59, "name" : "Quanta-45", "cno" : null, "regno" : null, "speed" : null }
{ "_id" : 99, "name" : "Brio", "cno" : null, "regno" : null, "speed" : null }
查询具有空值的文档
这将检索包含查询中指定字段的空值的文档。
>db.car.find( { speed: { $exists:true } })
{ "_id" : 8, "name" : "Zen", "speed" : 54 }
{ "_id" : 6, "name" : "HondaCity", "color" : "Grey", "cno" : "H106", "mfdcountry" : "Sweden", "speed" : 45 }
{ "_id" : ObjectId("5474642dd785e3a05a1808a7"), "name" : "Punto", "color" : "Wine Red", "cno" : "H109", "mfdcountry" : "Paris", "speed" : 45 }
{ "_id" : 9, "name" : "SwiftDezire", "color" : "Maroon", "cno" : "H108", "mfdcountry" : "New York", "speed" : 40 }
{ "_id" : 51, "name" : "NissanSunny", "cno" : "H678", "regno" : 141, "speed" : 25 }
{ "_id" : 99, "name" : "Brio", "cno" : null, "regno" : null, "speed" : null }
{ "_id" : 59, "name" : "Quanta-45", "cno" : null, "regno" : null, "speed" : null }
此操作检索速度字段具有空值的文档。
适用于现有操作的MongoDB Java程序
现在,让我们编写一个Java程序来检查MongoDB中是否存在这些字段。
package com.theitroad.mongodb;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import java.net.UnknownHostException;
public class MongoDBExists {
//method to check whether the field exists
public static void existstrue() throws UnknownHostException {
//Get a db connection
MongoClient m1 = new MongoClient("localhost");
//connect to test db,use your own here
DB db = m1.getDB("test");
//obtain the car collection
DBCollection coll = db.getCollection("car");
//checking whether regno field exists by setting exists to true
DBObject query = new BasicDBObject("regno", new BasicDBObject(
"$exists", true));
//store the documents in cursor car
DBCursor car = coll.find(query);
//iterate and print the contents of cursor
try {
while (car.hasNext()) {
System.out.println(car.next());
}
} finally {
//close the cursor
car.close();
}
}
//method to check the fields along along with the criteria entered
public static void existstruewithcriteria() throws UnknownHostException {
MongoClient m1 = new MongoClient("localhost");
DB db = m1.getDB("test");
DBCollection coll = db.getCollection("car");
//check whether speed fields exists and speed greater than 80
DBObject query = new BasicDBObject("speed", new BasicDBObject(
"$exists", true).append("$gt", 80));
DBCursor car = coll.find(query);
System.out.println("-----------------------------------");
try {
while (car.hasNext()) {
System.out.println(car.next());
}
} finally {
car.close();
}
}
//method to check the field does not exist
public static void existsfalse() throws UnknownHostException {
MongoClient m1 = new MongoClient("localhost");
DB db = m1.getDB("test");
DBCollection coll = db.getCollection("car");
//checking for mfdcountry field by setting exists to false
DBObject query = new BasicDBObject("mfdcountry", new BasicDBObject(
"$exists", false));
DBCursor car = coll.find(query);
System.out.println("-------------------------------------------------");
try {
while (car.hasNext()) {
System.out.println(car.next());
}
} finally {
car.close();
}
}
public static void existstruewithnullvalues() throws UnknownHostException {
MongoClient m1 = new MongoClient("localhost");
DB db = m1.getDB("test");
DBCollection coll = db.getCollection("car");
//returns documents with null values
DBObject query = new BasicDBObject("regno", new BasicDBObject(
"$exists", true));
DBCursor car = coll.find(query);
System.out.println("---------------------------------------------");
try {
while (car.hasNext()) {
System.out.println(car.next());
}
} finally {
car.close();
}
}
public static void main(String[] args) throws UnknownHostException {
//invoking all the methods
existstrue();
existstruewithcriteria();
existsfalse();
existstruewithnullvalues();
}
}
上面程序的输出是:
{ "_id" : 51.0 , "name" : "NissanSunny" , "cno" : "H678" , "regno" : 141.0 , "speed" : 25.0}
{ "_id" : 52.0 , "name" : "Fiat" , "cno" : "H679" , "regno" : 142.0 , "speed" : 57.0}
-------------------------------------------------------------------------------------------------------------
{ "_id" : { "$oid" : "5474896b93f400069d439c04"} , "name" : "Micra" , "color" : "Lime" , "cno" : "H186" , "mfdcountry" : "Ethopia" , "speed" : 84}
{ "_id" : { "$oid" : "5474896b93f400069d439c03"} , "name" : "Palio" , "color" : "Purple" , "cno" : "H183" , "mfdcountry" : "Venice" , "speed" : 82}
-----------------------------------------------------------------------------------------------------------------
{ "_id" : 8.0 , "name" : "Zen" , "speed" : 54.0}
{ "_id" : { "$oid" : "5474896b93f400069d439c00"} , "name" : "Indica" , "color" : "Silver" , "cno" : "H154"}
{ "_id" : 43 , "name" : "Astar" , "speed" : 79}
{ "_id" : 51.0 , "name" : "NissanSunny" , "cno" : "H678" , "regno" : 141.0 , "speed" : 25.0}
{ "_id" : 52.0 , "name" : "Fiat" , "cno" : "H679" , "regno" : 142.0 , "speed" : 57.0}
--------------------------------------------------------------------------------------------------------------
{ "_id" : 51.0 , "name" : "NissanSunny" , "cno" : "H678" , "regno" : 141.0 , "speed" : 25.0}
{ "_id" : 52.0 , "name" : "Fiat" , "cno" : "H679" , "regno" : 142.0 , "speed" : 57.0}
{ "_id" : 59.0 , "name" : "Quanta-45" , "cno" : null , "regno" : null , "speed" : null }
{ "_id" : 99.0 , "name" : "Brio" , "cno" : null , "regno" : null , "speed" : null }
MongoDB的存在是一个易于理解的操作,它可以帮助我们仅选择具有给定字段的特定文档。

