我想有一个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
答案 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将在数据库中创建文档。如果是,它将更新文档。