Я пытаюсь использовать underscore.js в проекте Meteor, над которым я работаю, но не могу понять, как преобразовать набор объектов.underscore.js - создать массив уникальных элементов из объектов, встроенных в список объектов
объекты выглядеть примерно так (есть около 15k, но все они выглядят как эти два):
[{
"_id": "a_0011223344",
"taggedUsers": [{
"id": 1122244453,
"username": "john123"
}],
"field": "ABC"
}, {
"_id": "a_0011223345",
"taggedUsers": [{
"id": 1122244454,
"username": "bill123"
}, {
"id": 1122244455,
"username": "jim123"
}],
"field": "ABC"
}]
Каждый объект может иметь один или несколько "taggedUsers"
объектов, и мне нужно список уникальных полей "taggedUsers.username"
. Meteor не поддерживает функцию distinct mongoDB, поэтому я пытаюсь использовать underscore.js вместо (за то, что я прочитал, и рекомендацию в this post).
В моей боковой консоли сервера db.myCollection.distinct("taggedUsers.username")
возвращает желаемый результат ["john123", "bill123", "jim123"]
, но я не могу воспроизвести его в underscore.js.
Я пытался комбинацию _.each
, _.map
, _.pluck
и _.uniq
, но не увенчались успехом. Я думаю, что это может иметь что-то, что поля находятся во встроенных объектах, но я не уверен.
В идеале я хотел бы вернуть массив объектов, глядя, как это:
[{
"id": 1122244453,
"username": "john123",
"field": "ABC"
}, {
"id": 1122244454,
"username": "bill123",
"field": "ABC"
}, {
"id": 1122244455,
"username": "jim123",
"field": "DEF"
}]
taggedUsers.username
,
taggedUsers.id
и
field
feilds, и все дубликаты удалены, но был бы рад, если бы я может также просто получить массив
taggedUsers.usernames
, как и я в функции
db.colleciton.distinct()
.
В конечном счете было бы неплохо узнать, как получить базовый массив, массив уникальных объектов (или, может быть, даже получить результат db.collection.distinct()
в помощнике шаблона), но любая помощь или точка в правой направление было бы признателен!
Вы хотите массив помеченных пользователей, но этот пример показывает, что у вас также есть 'поле: ABC' в них. Это опечатка? –
«Поле» в родительском объекте тоже было бы полезно, позвольте мне изменить вопрос, чтобы сделать его более понятным. @DavidWeldon – pingo
@DavidWeldon Рекомендуем ли вы найти решение underscore.js, или я должен попытаться запустить запрос mongo на сервере и вызов его методом? – pingo