【问题标题】:How to use Meteor Upsert如何使用 Meteor Upsert
【发布时间】:2013-11-02 13:02:00
【问题描述】:

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

但似乎仍然无法弄清楚。

【问题讨论】:

  • 通过反复试验找到了答案......上面发布了解决方案
  • 您应该始终将答案材料作为答案发布在下面的框中。
  • @MikeGraf 我刚加入 Stack 时无法做到,因为我没有足够的声誉来发布答案或其他内容。我现在已经这样做了

标签: mongodb meteor


【解决方案1】:

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

参数

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

modifier: Mongo Modifier 指定如何修改文档

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

OPTIONS: multi Boolean True 修改所有匹配的文档;假 只修改其中一个匹配的文档(默认)。

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

【讨论】:

    【解决方案2】:

    试试这个:

    values.update({"id":id},
           { $set: {
              value: res.data['data']['last']['value'],
              time: Date.now() // no need coma here
          } },
          { upsert: true }
        );
    

    【讨论】:

      【解决方案3】:

      通过反复试验弄明白了:

      Values.upsert({
          // Selector
          source: "SourceOne",
          currency: "USD"
      }, {
          // Modifier
          $set: {
              value: res.data['data']['last']['value'],
              time: Date.now() // no comma needed here
          }
      });
      

      【讨论】:

      • +1 表示 // Selector// Modifier cmets。直到我看到那些我并不真正理解这里的概念......
      • 谢谢!当然希望官方文档给出示例。
      • 在没有文档更新的情况下,是否也会插入sourcecurrency
      • 当你使用$inc而不是$set时会发生什么,是使用默认值还是默认值+1?
      【解决方案4】:

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

      Values.upsert(id,
      {
        // Modifier
        $set: {
            value: res.data['data']['last']['value'],
            time: Date.now() // no need coma here
        }
      }
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-05
        • 2023-03-09
        • 2021-01-26
        • 2011-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多