これらは、Mongo DB employees Collection に存在する 3 つのサンプル レコードです。
ご覧のとおり、以下に示すレコードの 1 つで、「国」という名前のフィールドが1 つ欠落しています。
db.employees.find().pretty()
{
"_id" : ObjectId("513331a227a414395af00904"),
"name" : "Ravi",
"age" : "21",
"dept" : "DEV",
"country" : "IND"
}
{
"_id" : ObjectId("513331e627a414395af00905"),
"name" : "Pavan",
"age" : "23",
"dept" : "DEV"
}
{
"_id" : ObjectId("513331e627a414395af00907"),
"name" : "Saagy",
"age" : "22",
"dept" : "DEV",
"country" : "US"
}
上記のレコードに示すように、コレクション内の古いレコードに一部のキーが存在しない可能性がある既存の Mongo DB に取り組んでいます。
現在、以下のコードでは、国のキーが別の Record に存在しないため、応答として 1 つのレコードしか取得していません。
DBCollection mycollection = db.getCollection("employees");
BasicDBObject query = new BasicDBObject();
query.put("dept", "DEV");
query.put("country", "IND");
DBCursor cursor = mycollection.find(query);
while (cursor.hasNext())
{
System.out.println(cursor.next());
}
私の要件は、国キーが存在しない場合、それを IND として扱い、応答にも含める必要があるということです。
これは可能ですか??
私にお知らせください 。
更新部分
$exists を使用してみましたが、例外が発生しています
public class Test {
public static void main(String args[]) throws UnknownHostException {
Mongo mongo = new Mongo();
DB db = mongo.getDB("test");
DBCollection mycollection = db.getCollection("employees");
BasicDBObject query = new BasicDBObject();
query.put("dept", "DEV");
query.put("country", "IND");
DBObject subquery = new BasicDBObject("country", new BasicDBObject("$exists", false));
DBCursor cursor = mycollection.find(query,subquery);
while (cursor.hasNext())
{
System.out.println(cursor.next());
}
}
Exception in thread "main" com.mongodb.MongoException: Unsupported projection option: $exists
at com.mongodb.MongoException.parse(MongoException.java:82)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:314)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:295)
at com.mongodb.DBCursor._check(DBCursor.java:368)
at com.mongodb.DBCursor._hasNext(DBCursor.java:459)
at com.mongodb.DBCursor.hasNext(DBCursor.java:484)
at com.Test.main(Test.java:26)