让我的Meteor upsert功能正常工作时遇到一些麻烦。我相当(200行代码)新的,我有点麻烦。
该集合继续插入其他行,而不仅仅是更新。我花了30分钟的谷歌搜索,但我找不到任何我能理解的例子。
这是我的代码:
Values.upsert(
{
// Selector
source: "SourceOne",
currency: "USD"
},
{
// Modifier
value: res.data['data']['last']['value'],
time: Date.now(),
}
);
我也试过
if(Values.find(
{},{fields: {'source':"SourceOne", 'currency': "USD"}}
)) {
Values.update(
{
source: "SourceOne",
currency: "USD"
},
{
value: res.data['data']['last']['value'],
time: Date.now()
}
);
} else {
console.log('blah');
Values.insert({
source: "SourceOne",
currency: "USD",
value: res.data['data']['last']['value'],
time: Date.now()
});
}
似乎仍然无法弄明白。
答案 0 :(得分:47)
通过反复试验弄清楚:
Values.upsert({
// Selector
source: "SourceOne",
currency: "USD"
}, {
// Modifier
$set: {
value: res.data['data']['last']['value'],
time: Date.now() // no comma needed here
}
});
答案 1 :(得分:13)
上述内容不适用于ID。这适用于我(使用与更新相同的语法):
Values.upsert(id,
{
// Modifier
$set: {
value: res.data['data']['last']['value'],
time: Date.now() // no need coma here
}
}
);
答案 2 :(得分:0)
试试这个:
values.update({"id":id},
{ $set: {
value: res.data['data']['last']['value'],
time: Date.now() // no need coma here
} },
{ upsert: true }
);
答案 3 :(得分:0)
Mongo.Collection#upsert(选择器,修饰符,[选项],[回调])
参数
选择器:Mongo选择器,对象ID或字符串指定哪个 要修改的文件
修饰符:Mongo Modifier指定如何修改文档
回调:功能可选。如果存在,则使用错误对象调用 第一个参数,如果没有错误,则为受影响的文档数 作为第二个。
选项:multi Boolean True,用于修改所有匹配的文档;虚假 只能修改其中一个匹配的文档(默认设置)。
https://docs.meteor.com/api/collections.html#Mongo-Collection-upsert