У меня есть коллекция Монго DB:MongoDB Неверных результаты
Каждой дата (например, 2013-03-16) может иметь значение 3 страны: IND, США и SA, как показано ниже:
{
"name": "SAM",
"collection": [
{
"date": "2013-03-16",
"country": "IND",
"values": [
{
"price": "24.0",
"gece": "342.1",
"countrycode": "IN"
},
{
"price": "24.0",
"gece": "322.1",
"countrycode": "IN"
}
]
},
{
"date": "2013-03-16",
"country": "US",
"values": [
{
"price": "10.0",
"gece": "342.1",
"countrycode": "US"
},
{
"price": "120.0",
"gece": "342.1",
"countrycode": "US"
}
]
},
{
"date": "2013-03-16",
"country": "SA",
"values": [
{
"price": "12.0",
"gece": "432.1",
"country": "SA"
}
]
},
{
"date": "2013-03-17",
"country": "IND",
"values": [
{
"price": "10.0",
"gece": "532.1",
"country": "IN"
}
]
},
{
"date": "2013-03-17",
"country": "US",
"values": [
{
"price": "38.0",
"gece": "332.1",
"country": "US"
}
]
}
]
}
Я попытался с помощью кода ниже, чтобы проверить структуру:
BasicDBObject query = new BasicDBObject();
query.put("name", "SAM");
query.put("collection.date", "2013-03-17");
query.put("collection.country", "IND");
BasicDBObject fields = new BasicDBObject();
fields.put("name", 1);
fields.put("collection.$", 1);
Я запрашивая с датой 2013-03-17, но она возвращает данные для 2013-03-16.
Здесь был ответ:
{
"_id": {
"$oid": "513121ac0651150e227d2224"
},
"name": "SAM",
"collection": [
{
"date": "2013-03-16",
"country": "IND",
"values": [
{
"price": "24.0",
"gece": "342.1",
"countrycode": "IN"
},
{
"price": "24.0",
"gece": "322.1",
"countrycode": "IN"
}
]
}
]
}
Почему возвращаются неправильные данные даты я даю это?
Пожалуйста, смотрите отредактированный часть
Mongo mongo = new Mongo();
DB db = mongo.getDB("test");
DBCollection mycollection = db.getCollection("xxx");
BasicDBObject query = new BasicDBObject();
query.put("name", "SAM");
query.put("collection.date", "2013-03-16");
query.put("collection.country", "IND");
BasicDBObject fields = new BasicDBObject();
fields.put("name", 1);
fields.put("collection.$", 1);
BasicDBObject subquery = new BasicDBObject();
subquery.put("date", "2013-03-16");
subquery.put("country", "IND");
query.put("collection", new BasicDBObject("$elemMatch", subquery));
DBCursor cursor = mycollection.find(query);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
Тем не менее, я получаю все результаты
{ "_id" : { "$oid" : "513121ac0651150e227d2224"} , "name" : "SAM" , "collection" : [ { "date" : "2013-03-16" , "country" : "IND" , "values" : [ { "price" : "24.0" , "gece" : "342.1" , "countrycode" : "IN"} , { "price" : "24.0" , "gece" : "322.1" , "countrycode" : "IN"}]} , { "date" : "2013-03-16" , "country" : "US" , "values" : [ { "price" : "10.0" , "gece" : "342.1" , "countrycode" : "US"} , { "price" : "120.0" , "gece" : "342.1" , "countrycode" : "US"}]} , { "date" : "2013-03-16" , "country" : "SA" , "values" : [ { "price" : "12.0" , "gece" : "432.1" , "country" : "SA"}]} , { "date" : "2013-03-17" , "country" : "IND" , "values" : [ { "price" : "10.0" , "gece" : "532.1" , "country" : "IN"}]} , { "date" : "2013-03-17" , "country" : "US" , "values" : [ { "price" : "38.0" , "gece" : "332.1" , "country" : "US"}]}]}
Одна вещь, чтобы проверить ... являются даты, сохраненные в формате UTC (пока ваш поиск не?) – WiredPrairie