2015-01-09 2 views
1

У меня есть документ, который звучит так:

{ 
    "_id" : NumberLong(111603), 
    "max" : "Created At", 
    "document" : { 
     "_id" : ObjectId("54ad61013e016de5798c0582"), 
     "testfield1" : "ISUZU (GM)", 
     "Model - Range" : "N-series", 
     "testfield2" : "N NQR 75", 
    } 
} 

И я хотел бы объединить в коллекции, содержащей ряд этих документов. У меня проблема с «Model-Range» на шаге $ project. В настоящее время я использую

db.AE.aggregate([ 
    {"$project":{ 
     "Make":"$document.testfield1", 
     "Model":"$document.testfield2", 
     "_id":0, 
     "Group": "$document['Model - Range']" 
    }} 
]); 

Но по какой-то причине, MongoDB полностью игнорируя поле группы и только при добавлении двух других полей.

Есть ли способ адресовать поля с пробелами/специальными символами в них при проектировании в структуре агрегации MongoDB?

+0

Да, это недействительный способ опознать это (это строка, а не код JavaScript, который вы заметили), и вы действительно не должны называть такие поля. Windows учила слишком много молодых людей очень вредных привычек. Мы кодируем и моделируем «consecutiveCamelCasedNames», потому что у нас есть опыт, и мы знаем, что работает, а что нет. –

+0

Что делать, если у меня нет контроля над именами полей на основе документации mongoDB, единственными символами, которые не приняты, являются «.». и те, которые начинаются с «$». – Bola

+0

На это ответили. Я не хотел, потому что вы действительно не должны называть свойства таким образом. Это приводит только к тому, что кто-то приходит и исправляет ваш код. Оставьте лучшее наследие в мире и сделайте это в первый раз. –

ответ

3

Вы можете просто использовать обычную точечную нотацию для этого поля:

db.AE.aggregate([ 
    {"$project":{ 
     "Make":"$document.testfield1", 
     "Model":"$document.testfield2", 
     "_id":0, 
     "Group": "$document.Model - Range" 
    }} 
]); 

Но я согласен с Нилом, что имена с пробелами в них следует избегать, если это возможно.

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