Javascript Underline.js-从嵌入在对象列表中的对象创建唯一项的数组

Javascript Underline.js-从嵌入在对象列表中的对象创建唯一项的数组,javascript,arrays,mongodb,meteor,underscore.js,Javascript,Arrays,Mongodb,Meteor,Underscore.js,我一直在尝试在我正在进行的一个项目中使用,但似乎不知道如何转换一组对象 对象看起来像这样(大约有15k,但它们看起来都像这两个): [{ “_id”:“a_0011223344”, “taggedUsers”:[{ “id”:1122244453, “用户名”:“john123” }], “字段”:“ABC” }, { “_id”:“a_0011223345”, “taggedUsers”:[{ “id”:1122244454, “用户名”:“bill123” }, { “id”:112224

我一直在尝试在我正在进行的一个项目中使用,但似乎不知道如何转换一组对象

对象看起来像这样(大约有15k,但它们看起来都像这两个):

[{
“_id”:“a_0011223344”,
“taggedUsers”:[{
“id”:1122244453,
“用户名”:“john123”
}],
“字段”:“ABC”
}, {
“_id”:“a_0011223345”,
“taggedUsers”:[{
“id”:1122244454,
“用户名”:“bill123”
}, {
“id”:1122244455,
“用户名”:“jim123”
}],
“字段”:“ABC”

}]
根据我们的对话,在服务器上通过方法调用进行计算似乎更好。出于教育目的,以下是使用下划线的方法:

// Get an array of docs somehow
var docs = Collection.find().fetch();

var taggedUsers = _.chain(docs)
  .map(function(d) {
    // Copy the 'field' to each of the tagged users within a doc
    _.each(d.taggedUsers, function(user) {
      user.field = d.field;
    });
    return d;
  })
  .pluck('taggedUsers') // Extract only the tagged users arrays
  .flatten() // Flatten them into a single array
  .value();

// taggedUsers could look something like:
// [ { id: 1122244453, username: 'john123', field: 'ABC' },
//   { id: 1122244454, username: 'bill123', field: 'ABC' },
//   { id: 1122244455, username: 'jim123', field: 'ABC' },
//   { id: 1122244453, username: 'john123', field: 'ABC' } ]

// Compute a unique lists of tagged users, where the docs are unique by id
var utu = _.uniq(taggedUsers, false, function(user) {return user.id;});

您需要一个带标签的用户数组,但示例显示其中还有一个
字段:ABC
。这是打字错误吗?父对象中的“字段”也会有帮助,让我编辑这个问题以使其更清楚@DavidWeldon@DavidWeldon您是否建议尝试寻找下划线.js解决方案,或者我应该尝试在服务器上运行mongo查询并使用方法调用它吗?这取决于-您是否只是为了这样做才将文档发布到客户端,还是出于其他原因需要在客户端上发布文档?如果它们已经发布,在助手中使用下划线会更快。@DavidWeldon因为每个模板一次发布20-30个下划线。考虑到这一点,我可能应该在服务器上运行它,但出于教育目的,如果您能用下划线演示如何运行它,那就太棒了!谢谢谢谢,下划线似乎是正确的方法,但我的控制台返回的
taggedUsers
utu
是空数组。我的查询如下:
Collection.find({“taggedUsers”):{“$exists”:true}},{fields:{u id:1,field:1,“taggedUsers.username”:1,“taggedUsers.id”:1}}).fetch()如果有帮助的话。我认为错误与
“taggedUsers.id”
“taggedUsers.username”
周围的引号有关,但可能是错误的。请确保
文档中有某些内容。我用您提供的示例测试了代码,结果很好。也许只要试试
var docs=Collection.find({taggedUsers:{$exists:true}}).fetch()
。(假设
集合
替换为您的实际集合名称)。如下所示:。显然,不要认为你的解决方案不起作用,但我不确定我遗漏了什么。
.field
应该是
字段
字段(即ABC、DEF),还是获取
用户
d
值的方法?还有,
d
应该代表什么?谢谢
d
docs
数组中的单个文档
user
taggedUsers
数组的单个元素。如果您
console.log(文档[0])
,您会得到什么?可能您的结构与示例中使用的结构不同。你有我能看到的测试回购吗?我需要运行,但过一会儿我将对此进行检查。这是控制台中
[0]
对象的打印输出,蒙古语:。我会继续努力的,但很高兴你回来了!我以前读过你的博客,所以在这里遇到你很酷,谢谢你的帮助。