我一直在尝试在我正在处理的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"
字段的列表。流星不支持MongoDB的不同的功能,所以我试图用underscore.js代替(每次我读过,并在reccomendation这个职位)。
在我的服务器端控制台中,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
,并删除了所有重复项,但是如果我也能得到函数中的 taggedUsers.usernames
类似数组,那将是很高兴 的 db.colleciton.distinct()
。
最终,很高兴知道如何获取基本数组,唯一对象的数组(甚至可能如何获取db.collection.distinct()
模板帮助程序的结果),但是对正确方向的任何帮助或指导将不胜感激!
根据我们的对话,听起来最好通过方法调用在服务器上进行计算。出于教育目的,这是使用下划线的方法:
// 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;});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句