Я ищу документы, содержащие конкретный _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.
У меня, вероятно, отсутствует что-то действительно элементарное, но если вы, ребята, можете посоветовать мне, я бы очень признателен.
Я просто понял, что контакты не является массивом, то численно индексированный объект .. (предположим, что преобразование из массива PHP отвечает за это) - будет ли это быть проблема? Почему он что-то возвращает? – Micah
Тот факт, что 'контакты' представляет собой объект с числовыми ключами вместо массива, определенно является проблемой здесь. Эти запросы не должны ничего возвращать (и не делали, когда я пробовал их в этих документах). – JohnnyHK
Коррекция - Rock Mongo интерпретирует это неправильно. Я просмотрел данные с консоли и это массив. Исправлен код выше. – Micah