【发布时间】:2015-12-27 14:31:33
【问题描述】:
我一直在尝试在我正在处理的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 不支持 mongoDB 的 distinct 函数,所以我尝试使用 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 字段,并删除了所有重复项,但如果我也能像在db.colleciton.distinct() 函数中一样获得taggedUsers.usernames 的数组,我会很高兴。
最终知道如何获取基本数组、唯一对象数组(或者甚至可能如何在模板帮助程序中获取db.collection.distinct() 的结果)会很好,但是任何帮助或要点正确的方向将不胜感激!
【问题讨论】:
-
您想要一个标记用户数组,但该示例显示您还有一个
field: ABC。是不是打错字了? -
父对象中的“字段”也会有帮助,让我编辑问题以使其更清楚@DavidWeldon
-
@DavidWeldon 您是否建议尝试查找 underscore.js 解决方案,或者我应该尝试在服务器上运行 mongo 查询并使用方法调用它?
-
这取决于 - 您是否将文档发布给客户端只是为了执行此操作,还是出于其他原因需要在客户端上使用它们?如果它们已经发布,在帮助程序中使用下划线会更快。
-
@DavidWeldon 因为有这么多我每次只发布 20-30 个模板。鉴于此,我可能应该在服务器上运行它,但出于教育目的,如果你能用下划线告诉我如何做到这一点,那就太棒了!谢谢
标签: javascript arrays mongodb meteor underscore.js