2016-08-03 2 views
0

У меня есть коллекция называется платежи с примером его документа, как показано ниже:Противоречивые результаты запросов с вложенными документами на MongoDB

{ 
    "_id" : ObjectId("579b5ee817e3aaac2f0aebc1"), 
    "updatedAt" : ISODate("2016-07-29T11:04:01.209-03:00"), 
    "createdAt" : ISODate("2016-07-29T10:49:28.113-03:00"), 
    "createdBy" : ObjectId("5763f56010cd7b03008147d4"), 
    "contract" : ObjectId("578cb907f1575f0300d84d09"), 
    "recurrence" : [ 
     { 
      "when" : ISODate("2016-05-29T11:03:45.606-03:00"), 
      "_id" : ObjectId("579b6241ea945e3631f64e2d"), 
      "transaction" : { 
       "createdAt" : ISODate("2016-05-29T11:03:45.608-03:00"), 
       "tid" : "9999999999999999B01A", 
       "status" : 4, 
       "code" : "00", 
       "message" : "Transação autorizada" 
      }, 
      "status" : "PAGO" 
     }, 
     { 
      "when" : ISODate("2016-06-29T11:03:45.608-03:00"), 
      "_id" : ObjectId("579b6241ea945e3631f64e2c"), 
      "transaction" : { 
       "createdAt" : ISODate("2016-06-29T11:03:45.608-03:00"), 
       "tid" : "9999999999999999B01A", 
       "status" : 4, 
       "code" : "00", 
       "message" : "Transação autorizada" 
      }, 
      "status" : "PAGO" 
     }, 
     { 
      "when" : ISODate("2016-07-29T11:03:45.608-03:00"), 
      "_id" : ObjectId("579b6241ea945e3631f64e2b"), 
      "status" : "ERRO", 
      "transaction" : { 
       "code" : "56", 
       "createdAt" : ISODate("2016-07-29T11:04:01.196-03:00"), 
       "message" : "Autorização negada", 
       "status" : 5, 
       "tid" : "1006993069000730B88A" 
      } 
     }, 
     { 
      "when" : ISODate("2016-07-30T11:03:45.608-03:00"), 
      "_id" : ObjectId("579b6241ea945e3631f64e2a"), 
      "status" : "PENDENTE" 
     }, 
     { 
      "when" : ISODate("2016-07-31T11:03:45.608-03:00"), 
      "_id" : ObjectId("579b6241ea945e3631f64e29"), 
      "status" : "PENDENTE" 
     }, 
     { 
      "when" : ISODate("2016-08-01T11:03:45.608-03:00"), 
      "_id" : ObjectId("579b6241ea945e3631f64e28"), 
      "status" : "PENDENTE" 
     } 
    ], 
    "status" : "PAGO", 
    "conditions" : { 
     "originalValue" : 7406.64, 
     "totalValue" : 7400, 
     "upfrontValue" : 1500, 
     "upfrontInstallments" : 3, 
     "balanceInstallments" : 9 
    }, 
    "__v" : 0, 
    "transaction" : { 
     "code" : "00", 
     "createdAt" : ISODate("2016-07-29T10:49:46.610-03:00"), 
     "message" : "Transação autorizada", 
     "status" : 6, 
     "tid" : "1006993069000730AF5A" 
    } 
} 

Если я выполнить запрос ниже, я получаю нужный документ, показанный выше:

db.payments.find({ "recurrence.transaction.tid": "1006993069000730B88A" }) 

Однако, если я запускаю этот другой запрос, MongoDB возвращает всю мою коллекцию (предположительно потому, что он не соответствует идентификатору поддокумента в):

db.payments.find({ "recurrence._id": ObjectId("579b6241ea945e3631f64e2b") }) 

Оба запроса должны возвращать тот же результат! Я также проверил некоторые другие вопросы, включая этот one, поэтому, если я не схожу с ума, я делаю то же самое. Не знаю, почему непоследовательные результаты.

+0

Вы уверены, что вы не имеют нескольких документов с дублируемым объектом ObjectId? – helmy

+0

@helmy Я был, но теперь, когда вы указали это, я читаю это: http://stackoverflow.com/questions/4677237/possibility-of-duplicate-mongo-objectids-being-generated-in-two-different-colle и кажется, что я получаю дубликаты идентификаторов .. почему ??? –

+0

Скорее всего, ошибка приложения будет моей догадкой – helmy

ответ

0

Tryout это:

db.payments.find ({рецидивы: {$ elemMatch: { "transaction.tid": "1006993069000730B88A"}}}). Довольно()

Смежные вопросы