35

让我的 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

4 回答 4

53

通过反复试验弄清楚了:

Values.upsert({
    // Selector
    source: "SourceOne",
    currency: "USD"
}, {
    // Modifier
    $set: {
        value: res.data['data']['last']['value'],
        time: Date.now() // no comma needed here
    }
});
于 2013-12-28T00:10:37.950 回答
13

以上不适用于ID。这对我有用(使用与更新相同的语法):

Values.upsert(id,
{
  // Modifier
  $set: {
      value: res.data['data']['last']['value'],
      time: Date.now() // no need coma here
  }
}
);
于 2015-01-22T00:49:50.263 回答
1

尝试这个:

values.update({"id":id},
       { $set: {
          value: res.data['data']['last']['value'],
          time: Date.now() // no need coma here
      } },
      { upsert: true }
    );
于 2017-11-20T07:29:07.520 回答
0

Mongo.Collection#upsert(selector, modifier, [options], [callback])

论据

选择器:Mongo 选择器、对象 ID 或字符串 指定要修改的文档

修饰符:Mongo Modifier 指定如何修改文档

回调:函数可选。如果存在,则以错误对象作为第一个参数调用,如果没有错误,则将受影响文档的数量作为第二个参数。

OPTIONS: multi Boolean True 修改所有匹配的文档;false 仅修改一个匹配的文档(默认)。

https://docs.meteor.com/api/collections.html#Mongo-Collection-upsert

于 2019-09-25T07:31:19.797 回答