web-dev-qa-db-fra.com

Comment utiliser Meteor Upsert

Avoir un peu de mal à faire fonctionner ma fonction Meteor upsert. Je suis assez nouveau (200 lignes de code) et j'ai quelques problèmes. 

La collection continue à avoir des lignes supplémentaires insérées, plutôt que de simplement mettre à jour. Je passe les 30 dernières minutes à googler, mais je ne trouve aucun exemple que je puisse comprendre.

Voici mon code:

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

J'ai aussi essayé

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

Et n'arrive toujours pas à comprendre.

28
Varun Jain

Compris par essais et erreurs:

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

Ce qui précède ne fonctionne pas pour les identifiants. Cela fonctionne pour moi (avec la même syntaxe que update): 

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

Essaye ça: 

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