2016-03-21 10 views
0

Dieser Meteor-Code muss prüfen, ob ein bestimmtes Dokument in der Sammlung vorhanden ist, indem überprüft wird, ob ein Cursor zurückgegeben wird, und wenn kein Cursor zurückgegeben wird, ist das Dokument nicht vorhanden. aber es gibt immer true zurück, auch wenn es keinen Wert "alosh" für das Feld text in einem der Dokumente in der Sammlung
gibt.
Warum und wie kann es behoben werden?Prüfen, ob Sammlung finden einen Cursor zurückgeben

Dank
if (myCollection.find({text: 'alosh'}, {limit: 1})) {console.log('found');} 

bearbeiten
Der Grund, warum ich nicht colllection.findOne verwendet haben ist mein Verständnis, dass es langsamer wird viel nach this post

+0

Fair enough auf Ihrem bearbeiten, aber es ist erwähnenswert, dass Meteor im Grunde nicht 'finden() Grenze (1)' für 'FindOne 'auf jeden Fall (siehe [Definition] (https://github.com/meteor/meteor/blob/f0404b6e0d50ce80949f896d346d5b2557da5494/packages/minimongo/minimongo.js#L122)). Und wenn Sie das 'count()' hinzugefügt haben, ist es wirklich nicht klar, dass Sie signifikante Einsparungen erzielen (siehe Geschwindigkeitstest [hier] (https://gist.github.com/jmikola/5208918)) – rubie

Antwort

0

Fügen Sie eine Anzahl hinzu. Ein Cursor wird immer ein truthiger Wert sein, da der Cursor selbst zurückgegeben wird. Sie müssen die Datensätze in der Cursor so ... zurück

if (myCollection.find({text: 'alosh'}, {limit: 1}).count()) { 
    console.log('found'); 
} 

Da keine docs ist 0 und 0 ist Falsey dies nur zurückgeben sollte, wenn Dokumente gefunden werden

0

Idee für Lösung:

Sie wollen verstehen, wenn es ein Dokument mit einem bestimmten Wert für eine bestimmte Eigenschaft. Sie könnten verwenden:

if(myCollection.findOne({text: 'alosh'})){ 
console.log("found");} 
0

Mongo Cursor enthalten sind, zu überprüfen, scheinen die gleichen verhalten als Arrays darin, dass ein leerer Cursor (und ein leeres Array) true auswerten.

So !![] //true und !!collection.find({text : "alosh"}) //true.

ABER collection.findOne({text : "alosh"}) Ihre if scheitern -. So dass anstelle

http://docs.meteor.com/#/full/findone