2015-06-20 3 views
1

Я работаю в Meteor и пытаюсь получить только содержимое одного поля в документе Mongodb. Это конкретное поле является массивом. Я прочитал монгольские документы и несколько связанных вопросов, но моя проекция просто не работает. Это то, что у меня есть:Возвращение содержимого одного поля (массива) из документа Mongodb в Meteor

Пользователь добавляет в массив с помощью следующей формы:

Template.One.events({ 
    'submit form': function(e) { 
     e.preventDefault(); 
     var currentId = this._id 
     var oneProperties = { 
      selections: $(e.target).find('[name=selection]').val() 
     }; 
     Charts.update(currentId, ($addToSet: selections}, function() {}); 
    } 
}); 

Результирующий документ:

{ 
    "_id": "some ID", 
    "selections": ["A","B"] 
} 

Обратитесь к массиву в качестве помощника для другого шаблона для доступа к документам из другая коллекция.

Template.Two.helpers({ 
    comps: function() { 
     var selected = Charts.findOne({_id:this._id}, {selections:1, _id:0}); 
     return Companies.find({ticker: {$in: selected}}); 
    } 
}); 

При запуске запроса Charts.findOne выше, непосредственно в консоли, он возвращает весь документ, без каких-либо ограничений.

Если я заменю Charts.findOne({_id:this._id}, {selections:1, _id:0}); просто ["A","B"], тогда все остальное прекрасно работает. Поэтому я знаю, что это сама проекция. Я также не могу сказать, будет ли этот запрос возвращаться, просто нужен массив, который мне нужен, или имя selections:.

Любые мысли очень оценены.

+0

Вы должны программно создать весь объект: http://stackoverflow.com/questions/22331216/programmatically-updating-fields-in-mongo-and-meteor – fuzzybabybunny

ответ

2

Попробуйте получить доступ поле Подборки документа, который должен дать вам массив непосредственно, а не весь документ:

var selected = Charts.findOne({_id:this._id}, {selections:1, _id:0}); 

даст вам { "selections": ["A","B"] }

Но

var selected = Charts.findOne({_id:this._id}, {selections:1, _id:0}).selected; 

будет дайте необходимую информацию

["A","B"] 
+1

Спасибо! Гораздо проще, чем я это делал. Окончательный запрос: var selected = Charts.findOne ({_ id: this._id}). Выборы; – Bren

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