使用Meteor插入设置唯一ID

时间:2013-12-29 06:01:26

标签: javascript facebook mongodb meteor

我正在将FB Graph API链接到Meteor,以便我可以检索用户照片,并且我无法将Meteor id设置为每张照片的Facebook ID。现在,当调用该函数时,它将在数据库中多次返回相同的照片,因为Meteor每次都会为每张照片分配一个新的_id。

例如,一个条目可能如下所示:

Object {_id: "cnMsxSkmMXTjnhwRX", id: "1015160259999999", from: Object, picture: "https://photoSmall.jpg", source: "https://photoBig.jpg"…}

第二次,再次执行电话后,就像这样:

Object {_id: "acMegKenftmnaefSf", id: "1015160259999999", from: Object, picture: "https://photoSmall.jpg", source: "https://photoBig.jpg"…}

从而在MongoDB中创建两个id字段。

我正在使用的代码如下。我已经尝试了许多方法来修复代码无济于事。

Meteor.methods({
    getUserData: function() {
        var fb = new Facebook(Meteor.user().services.facebook.accessToken);
        var data = fb.getUserData();

        _.forEach(data.data, function(photo) {
            Photos.insert(photo, function(err) {
                    if(err) console.error(err); 
                });
            });
    }
});

提前致谢!

1 个答案:

答案 0 :(得分:0)

在插入照片之前检查照片是否存在

 ...

 _.forEach(data.data, function(photo) {
    if(Photos.findOne({id: photo.id})) return;

    ...

另一种选择是向id字段添加唯一键索引。甚至可以使用_id字段来存储id值。 (务必使用try catch以确保它不会导致第二个插入错误。)

使用不同的ID不会有不同的东西吗?

您还可以在使用_.uniq

运行它们之前清理它们