2017-05-26 2 views
0

Ich bin mit Meteor/Winkel an einem Projekt arbeiten, und ich will id erhalten, während ein Element EinsetzenWie kann ich id erhalte beim Einfügen Meteor/angular2

meinen Code verwenden ==>

collection.insert({ 
      name: name, 
      birthDay: birthDay , 
      birthPlace:birthPlace, 
      nationalities:nationalities, 
      fields : fields 
     }); 

ich versuche, diese aber es funktioniert nicht

const col = collection.insert({ 
       name: name, 
       birthDay: birthDay , 
       birthPlace:birthPlace, 
       nationalities:nationalities, 
       fields : fields 
      }); 
    console.log(col); 
+0

Sie sollten die ID in der Spalte Variable erhalten wie du es versucht hast. Können Sie mehr Code bereitstellen? –

+0

Ist Ihre 'collection' Variable eine Meteor-rxjs [' MongoObservable.Collection'] (https://angular-meteor.com/api/meteorx/s/latest/ObservableCollection#new_Collection_new) oder ein Meteor ['Mongo. Sammlung?] (Http://docs.meteor.com/api/collections.html#Mongo-Collection)? – ghybs

+0

Ich benutze MongoObservable.Collection – Dev

Antwort

0

Ich denke, Ihre collection Variable kein Standard Meteor ist Mongo.Collection, aber ein Meteor-rxjs' MongoObservable.Collection, welche insert() Methode gibt Observable anstelle der ID des neu eingefügten Dokuments zurück.

I.e. Sie haben so etwas wie getan:

const meteorRxjsCollection = new MongoObservable.Collection('collectionName'); 

In diesem Fall haben Sie 2 einfache Lösungen:

  • Zugang der Meteor Mongo Sammlung behind der Meteor-rxjs Wrapper:
const newDocId = meteorRxjsCollection.collection.insert(newDoc); 
    Abonnieren
  • zu den beobachtbaren zurück von Meteor-rxjs insert Methode, um die ID zu erhalten, in ähnlicher Weise wie einen Rückruf in Meteor insert mit:
const sub = meteorRxjsCollection.insert(newDoc).subscribe(function (newDocId) { 
    sub.unsubscribe(); 
    // use newDocId… 
}); 
0

Datenbank-Operationen und Methodenaufrufe in Meteor sind standardmäßig synchron auf dem Server und asynchron auf dem clien t. Das bedeutet, dass

collection.insert({ ... }); 

eine ID nur zurückgibt, wenn sie auf dem Server aufgerufen wird. Wenn Sie den eingefügten ID in dem Client haben wollen, müssen Sie einen Rückruf verwenden, da es async ist:

collection.insert({ ... }, function (err, insertedId) { 
    if (err) { 
     throw err; // handle error your preferred way 
    } 
    // do something with insertedId 
    console.log(insertedId); 
}); 
Verwandte Themen