Meteor - 从JSON数组

时间:2015-09-02 06:23:41

标签: javascript json meteor underscore.js

我想有一个JSON文件,通过它我可以用新条目为我的数据库提供数据。如果该条目已存在,则应检查该条目是否已修改。如果是这样,那么该条目应该更新。如果是新的,应该插入。 我设法插入新的条目,但为了更新我卡住了,代码将无法运行:

Fruits = new Mongo.Collection('fruits');

var fruitSeeds = [
{
    "nameId": "passionFruit",
    "name": "Passion Fruit",
},
{
    "nameId": "banana",
    "name": "Banana",
},
{
    "nameId": "pineapple",
    "name": "Pineapple",
},
{
    "nameId": "orange",
    "name": "Orange",
}
];


_.each(fruitSeeds, function (fruit) {
    if (fruit.nameId === Fruits.findOne({
            name: fruit.nameId
        }).nameId) {
        Fruits.update(fruit);
        console.log("updated", fruit.name);
    } else {
        Fruits.insert(fruit);
        console.log("inserted", fruit.name);
    };

});

感谢您的帮助! VIN

1 个答案:

答案 0 :(得分:1)

使用upserts。请参阅http://docs.meteor.com/#/full/upsert

您的案例示例:

_.each(fruitSeeds, function (fruit) {
    Fruits.upsert({nameId: fruit.nameId}, fruit);
});

您的实现问题是更新功能需要选择器参数。第一个参数选择要更新的数据库中的哪个对象。第二个参数是修饰符。

因此,这也可以正常工作:

Fruits.update({nameId: fruit.nameId}, fruit);

但是,我建议在这种情况下使用upsert。如果选择器与任何现有文档都不匹配,Upsert将在数据库中创建文档。如果是,它将更新文档。