2017-01-20 1 views
0

У меня есть документ MongoDB как этотMongoDB включают нуль в запросе массива результатов

{ 
    _id: ObjectId("53ea4bcb311164af033743fd") 
    "users": [ 
    { 
     "name": "Paul" 
     "age": 36 
    }, 
    null, 
    { 
     "name": "Steve", 
     "age": 74 
    } 
    ] 
} 

Я не мог бы лучший выбор дизайна, но я решил использовать индекс массива в качестве userKey. Теперь я хотел бы улучшить производительность моих запросов и использовать только поля, необходимые в моей проекции запроса, поэтому запрос выглядит следующим образом:

db.accounts.findOne('53ea4bcb311164af033743fd', {'users.name': 1}); 

Это возвращает

{ 
    _id: ObjectId("53ea4bcb311164af033743fd") 
    "users": [ 
    { 
     "name": "Paul" 
    }, 
    { 
     "name": "Steve" 
    } 
    ] 
} 

Теперь есть ли способ от null, так что индекс правильный? Я знаю, что это работает только с использованием проекции {'users': 1}, но для меня это не очень хорошо, потому что в моем пользовательском объекте довольно много значений.

ответ

0

Как вы упомянули в своем вопросе, это может быть не самая подходящая реализация для вашего случая использования, так как ваш массив не имеет однородных объектов, кроме нулей и документов.

Ваша команда findOne не приносит нулевые значения, потому что вы запрашиваете поле с именем «name» внутри каждого объекта поля массива.

Реализация соотношения 1: N путем вложения документов с именами полей и «возрастом» является рискованным и хрупким решением, которое может привести к превышению максимального размера документа 16 МБ, как объяснено в MongoDB documentation.

Будет полезно узнать больше о вашем приложении и использовании коллекции, на которую вы ссылаетесь, чтобы полностью понять, что вы реализуете и предлагаете дальше.

+0

Спасибо Энрике! Ограничение на 16 МБ для меня не очень важно, потому что у каждого аккаунта есть свой собственный документ и пользователи, связанные с ним, и существует ограничение на максимальных пользователей. На данный момент я решил проблему, добавив ключи к пользователям и ссылаясь на них. Некоторый рефакторинг был необходим, но все же лучшее решение для моей проблемы, я думаю. – tn4foxxah

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

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