2017-06-24 2 views
0

Ich versuche das jetzt stundenlang zu lösen, aber es funktioniert einfach nicht.Wie kann man eine Funktion nur ausführen, wenn ein bestimmtes Feld in einer Mongo-Sammlung einen bestimmten Wert enthält?

Ich speicherte einen "Schlüssel" (und einige andere unwichtige Informationen) als ein Array-Feld in einer Sammlung namens "storedKeys".

Das sieht aus wie:

{ 
    "_id" : "Company(02fd8fba13cf51cf)", 
    "infos" : { 
     "companyName" : "company", 
     "street" : "exampleStreet", 
     "number" : "123", 
     "city" : exampleCity", 
     "createdAt" : ISODate("2017-06-24T13:20:09.771Z") 
    }, 
    "key" : ["123456789"] 
} 

Nun, ich diesen „Schlüssel“ Feld als Erlaubnis verwenden möchten einige Updates in anderen Sammlungen laufen durch einen Meteor Methode aufrufen. Außerdem sollte diese Methode nur ausgeführt werden, wenn die richtige _id in storedKeys existiert.

Genauer gesagt: Führen Sie die Methode aus, wenn die Vars, die vom eventhandler in den Methodenaufruf eingefügt werden, mit den definierten Feldern in der Sammlung storedKeys übereinstimmen. Andernfalls werfen Sie einen Fehler und führen Sie die Methode nicht aus.

Zu diesem Zweck habe ich versucht, durch ein Formular senden, ein Verfahren zu nennen und als wie so eine if-Klausel mit einem Fund ({}) Funktion in der Serverseite Methode zu verwenden versucht:

-Client (Trigger-Methode)

Template.keyCollectionThing.events({ 
"submit form": function (e) { 
e.preventDefault(); 
var key = "123456789"; 
var id = "Company(02fd8fba13cf51cf)"; 
Meteor.call('updateOtherCollections', key, id); 
} 
}); 

Server (run-Methode)

Meteor.methods({ 
     'updateOtherCollections': function(key, id) { 

    if(storedKeys.find({"key": key}) && storedKeys.find({"_id": id})) { 

     Meteor.users.update(
      {'_id': this.userId 
      }, { 
       $push: { 
       'pushedId': id 
        } 
       }); 

     otherDB.update(
     {'_id': this.userId 
     }, { 
     $push: { 
      'pushedId': id 
     } 
     } 
    ); 

     storedKeys.update(
     {'_id': id 
    }, { 
     $set: { 
     "key": [] 
     } 
    }); 
    }} 
}); 

Das Problem ist jedoch, dass die Methode immer korrekt ausgeführt wird, auch wenn es keinen Schlüssel in storedKeys oder die _id in storedKeys nicht existiert. Also gibt es keine Verifizierung, die ich von der if() und find ({}) Sache erwartet habe. Die Methode wird immer ausgeführt und die Sammlungen werden aktualisiert (Sie können die Tür öffnen, ohne einen Schlüssel zu haben).

Ich bin sehr dankbar für jede Hilfe oder neue Ansätze!

Antwort

2

.find() gibt einen Cursor, die eine Funktion die immer truthy sein wird. Wenn Sie erwarten, dass ein einzelnes Dokument gefunden wird, verwenden Sie .findOne(). Wenn Sie erwarten, dass> 0 gefunden wird, können Sie .find(query).count() testen (0 wird falsch sein, jede andere Nummer wird truthy sein)

+0

Perfekt! .findOne() löste das Problem, vielen Dank. – Jaybruh

Verwandte Themen