如何使用Meteor Upsert

时间:2013-10-24 01:48:58

标签: mongodb meteor

让我的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()
    });
  }

似乎仍然无法弄明白。

4 个答案:

答案 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