2013-09-13 2 views
3

У меня есть следующая структура данныхMongoDB elemMatch-документы

{ 
    "_id" : ObjectId("523331359245b5a07b903ccc"), 
    "a" : "a", 
    "b" : [ 
     { 
      "c" : { 
       "_id" : ObjectId("5232b5090364678515db9a82"), 
       "d" : "d1" 
      } 
     }, 
     { 
      "c" : { 
       "_id" : ObjectId("5232b5090364678515db9a83"), 
       "d" : "d2" 
      } 
     } 
    ] 
} 

Для следующих запросов, Монго возвращает

> db.test.find({b : {$elemMatch : {'c.d': 'd1'}}}).count(); 
1 
> db.test.find({b : {$elemMatch : {c: {d: 'd1'}}}}).count(); 
0 

К сожалению, для следующих утверждений

B b = new B(); 
C c = new C(); 
b.c = c; 
b.c.d = "d1"; 
createQuery().field("b").hasThisElement(b).asList(); 

Morphia генерирует дб. test.find ({b: {$ elemMatch: {c: {d: 'd1'}}}}), который возвращает 0.

Это ошибка монго или ошибка морфия? Есть ли способ обхода решения для получения согласованного документа?

  • Обратите внимание, что в реальной практике у меня есть 2 условия для elemMatch, поэтому я должен использовать «elemMatch», а не «точечную нотацию». Вышесказанное просто для упрощения моего дела для удобства просмотра.
  • Я бегу MongoDB 2.4.6 и 1.2.3 морфий

спасибо!

+1

Вы используете несколько В и С классов, но нет никакого способа, чтобы высокий, что они должны делать. Может быть, полный пример? – zero323

+1

@ zero323 считают их простыми pojo. – ericcxu

+0

Нет ли решения этой проблемы? – youseeus

ответ

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