[英]Joining an array on another array's value
我正在使用mongodb,并且正在构建具有两个集合的应用程序: users和items 。
我希望用户能够保存他们喜欢的项目,并转到他们的已保存项目页面,在该页面上,项目将以与保存时相反的顺序显示(最后一次保存显示在最前面)。
此刻,我正在将每个保存的项目的ID连同saveDate一起添加到用户的个人资料saveItems数组中,如下所示:
user profile
{
savedItems: [{id: "", savedDate: ""}, {id: "", savedDate: ""}, etc...]
}
每当需要检索这些项目时,我都会在该项目集合中查询ID为$$的对象在此数组中。 像这样:
var items = Items.find({_id: {$in: _.pluck(user.savedItems, 'id')}});
这里的问题是我不能根据additionalDate订购那些物品。
那么有可能将addedDate映射到检索到的项目的每个对象上吗?
(类似: 如果 retriedItems.id == savedItems.id, 则将 addedDate推送到那里。)
这将导致以下项数组:
[
{id:"", itemName:"", price: "", [...], savedDate: ""},
{id:"", itemName:"", price: "", [...], savedDate: ""},
[...]
]
谢谢。
我创建了两个函数来帮助您做到这一点:
function mergeDates(listDates, listItems) {
for (var i = 0; i < listDates.length; i++) {
var index = findListIndex(listItems, listDates[i].id);
if (index != null) listItems[index].savedDate = listDates[i].savedDate;
}
return listItems;
}
function findListIndex(listItems, id) {
for (var i = 0; i < listItems.length; i++) {
if (listItems[i].id == id) return i;
}
return null;
}
第一个是mergeDates,它的第一个列表包含日期,第二个列表listItems是项目列表。
我用日期循环列表,并为其中的每个项目调用第二个函数,该函数返回第二个列表中相同元素的索引,因此findListIndex将搜索所有元素并在找到相同ID时返回其索引。
现在,具有新找到索引的功能mergeDates将把saveDate值添加到listItems中,使其等于listDates上的值!
然后该函数返回包含所有项目信息的列表,包括日期!
这是调用函数的方法:
var listWithDate = mergeDates(savedItems, items);
希望能帮助到你 !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.