2012-10-18 2 views
1

Я ищу документы, содержащие конкретный _id в массиве контактов в документе. Так вот структура:Почему isnt mongo возвращает объект в массиве?

{ 
"_id": ObjectId("505c2daea9d397f2260001cd"), 
"contacts": [ 
    { 
     "userGroupId": ObjectId("50422b53743d6c7c0e000000"), 
     "userId": ObjectId("5061f8c66096eee07d000008") 
    }, 
    { 
     "userGroupId": ObjectId("505bf9476096ee990200000e"), 
     "userId": ObjectId("505c2daea9d397f2260001ce") 
    }, 
     { 
     "userGroupId": ObjectId("50422b75743d6c700e000004"), 
     "userId": ObjectId("506cff736096ee1e26000384") 
    }, 
    { 
     "userGroupId": ObjectId("50422b66743d6c6b0e000000"), 
     "userId": ObjectId("505c2daea9d397f2260001cf") 
    }, 
    { 
     "userGroupId": ObjectId("5050e86aa9d3977b67000000"), 
     "userId": ObjectId("506494ef6096ee021f000064") 
    }, 
    { 
     "userGroupId": ObjectId("50422b53743d6c7c0e000000"), 
     "userId": ObjectId("504d72246096ee2348000008") 
    }, 
    { 
     "userId": ObjectId("50735e8e6096ee7c510002b9"), 
     "userGroupId": ObjectId("5046c73e6096ee1b77000001") 
    } 
    ] 
} 

Вот второй документ:

{ 
"_id": ObjectId("505c2da0a9d397f2260000b7"), 
"contacts": [ 
     { 
     "userGroupId": ObjectId("50422b66743d6c6b0e000000"), 
     "userId": ObjectId("505c2da0a9d397f2260000b8") 
    }, 
    { 
     "userId": ObjectId("5061f8c66096eee07d000008"), 
     "userGroupId": ObjectId("50422b53743d6c7c0e000000") 
    }, 
    { 
     "userId": ObjectId("50735e8e6096ee7c510002b9"), 
     "userGroupId": ObjectId("5046c73e6096ee1b77000001") 
    } 
    ] 
} 

Вы заметите, что оба документа имеют USERID из ObjectId ("50735e8e6096ee7c510002b9") в них. Я выполняю эту команду:

db.collection.find({ 'contacts': 
    {$elemMatch: { userId: ObjectId("50735e8e6096ee7c510002b9") } } 
}); 

Какой должен (я думаю) вернуть оба документа. Но он возвращает только второй документ. Не первый. Я также пробовал:

db.collection.find({'contacts.userId': ObjectId("50735e8e6096ee7c510002b9") }); 

, который выполняет то же самое, что и запрос $ elemMatch.

У меня, вероятно, отсутствует что-то действительно элементарное, но если вы, ребята, можете посоветовать мне, я бы очень признателен.

+0

Я просто понял, что контакты не является массивом, то численно индексированный объект .. (предположим, что преобразование из массива PHP отвечает за это) - будет ли это быть проблема? Почему он что-то возвращает? – Micah

+2

Тот факт, что 'контакты' представляет собой объект с числовыми ключами вместо массива, определенно является проблемой здесь. Эти запросы не должны ничего возвращать (и не делали, когда я пробовал их в этих документах). – JohnnyHK

+1

Коррекция - Rock Mongo интерпретирует это неправильно. Я просмотрел данные с консоли и это массив. Исправлен код выше. – Micah

ответ

0

Это была проблема с прикладным слоем, а не Mongo. Одна из записей была введена в цифровую форму, другая - нет, я просто работал с Rock Mongo, который, похоже, закрепил все массивы.

Спасибо за вашу помощь JohnnyHK

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

  • Нет связанных вопросов^_^