Ce sont 3 exemples de fichiers présents dans ma collection d'employés de Mongo DB.MongoDB: Les anciens enregistrements de la collection Mongo DB ne contiennent pas les clés nécessaires
Si vous pouvez observer, il manque un champ nommé "country" dans l'un des enregistrements ci-dessous.
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"
}
Je travaille sur un DB existant où Mongo certaines clés ne peuvent pas être présents dans les anciens dossiers de la collection comme indiqué dans les documents ci-dessus.
Actuellement avec le code ci-dessous, je reçois un seul enregistrement comme réponse que la clé de pays n'est pas présent dans un autre enregistrement.
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());
}
Mon exigence est que, si la clé de pays n'est pas présent, alors il doit être traité comme IND et devrait également être inclus dans la réponse.
Est-ce possible?
Faites-le moi savoir s'il vous plaît.
Mise à jour Partie
J'ai essayé d'utiliser existe $, mais je reçois une exception
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)
Avez-vous essayé [$ ou] (http://docs.mongodb.org/manual/reference/operator/or/) et [existe] $ (http: // docs .mongodb.org/manual/reference/operator/exists /) pour votre requête? Si vous n'utilisez pas un calque d'objet qui fournit des valeurs par défaut lorsque null, je suggérerais juste d'ajouter la logique à votre code plutôt que de faire le travail occupé de la DB. – WiredPrairie
Merci pour le $ ou et existe existe, je ne parle pas d'eux plus tôt. Je vais essayer et poster si je suis confronté à un problème à ce sujet. – Pawan
Merci, je peux gérer cela avec $ existe m mais en ce moment je reçois une exception, s'il vous plaît voir la partie mise à jour dans ma question. – Pawan