Javascript 选择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

在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

我使用的是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
}