Javascript 选择Meteor.js中具有唯一字段组合的记录
在Meteor.js中,我们如何选择字段的唯一组合?例如,如果我们有:Javascript 选择Meteor.js中具有唯一字段组合的记录,javascript,node.js,mongodb,meteor,Javascript,Node.js,Mongodb,Meteor,在Meteor.js中,我们如何选择字段的唯一组合?例如,如果我们有: type color owner ---- ----- ----- animal red paul animal red jack animal blue paul food blue jack 应如何获得以下结果集: type color ---- ----- animal red animal blue food blue
type color owner
---- ----- -----
animal red paul
animal red jack
animal blue paul
food blue jack
应如何获得以下结果集:
type color
---- -----
animal red
animal blue
food blue
我使用的是meteor smart collections 0.4.0和meteor 0.7.0.1如果您准备进行提取,则可以使用下划线轻松完成此操作,这可能取决于您有多少文档:
_.uniq(yourCollection.find({}, {fields: {type: 1, color: 1, _id: 0}}).fetch(), function(item) { return item.type+item.color; });
唯一的警告是,为了比较,您正在连接字符串,因此如果存在像{type:'foo',color:'bar'}和{type:'foob',color:'ar'}这样的对的可能性,它将失败。在您给出的示例中,这似乎不太可能,但是如果您担心这是一个问题,那么您只需要更改迭代器函数的结构,做一些比连接两个字段更富想象力的事情。虽然它需要返回一个原语,但我认为如果您返回一个对象或数组,它将不起作用。我认为Meteor的Minimongo驱动程序还没有包含聚合框架的帮助程序,但是至少有一个问题 假设您的数据如下所示:
db.things.insert([
{ type: 'animal', color: 'red', owner: 'paul'},
{ type: 'animal', color: 'red', owner: 'jack'},
{ type: 'animal', color: 'blue', owner: 'paul'},
{ type: 'food', color: 'blue', owner: 'jack'}
])
您可以在服务器端使用MongoDB和:
结果如下:
{
"result" : [
{
"_id" : {
"type" : "food",
"color" : "blue"
}
},
{
"_id" : {
"type" : "animal",
"color" : "blue"
}
},
{
"_id" : {
"type" : "animal",
"color" : "red"
}
}
],
"ok" : 1
}
更好的函数可能是functionitem{return JSON.stringify{type:item.type,color:item.color};}
{
"result" : [
{
"_id" : {
"type" : "food",
"color" : "blue"
}
},
{
"_id" : {
"type" : "animal",
"color" : "blue"
}
},
{
"_id" : {
"type" : "animal",
"color" : "red"
}
}
],
"ok" : 1
}