2016-03-21 5 views
0

このMeteorコードは、カーソルが返されたかどうかをチェックして特定のドキュメントがコレクションに存在するかどうかをチェックする必要があります。コレクション内の文書のいずれかにtextフィールドの値「alosh」がなくても常にtrueを返します

なぜ、どのように修正できますか?あなたがあるかどうか理解したいcollection findがカーソルを返すかどうかをチェック

:ありがとう

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

編集
私はcolllection.findOneを使用しなかった理由は、それがはるかに遅いソリューションのthis post

+0

は、フェアユースが、それは流星は基本的に '()を見つけないことを言及する価値がある(1)' findOne 'の限界。 'とにかく(定義を参照(https://github.com/meteor/meteor/blob/f0404b6e0d50ce80949f896d346d5b2557da5494/packages/minimongo/minimongo.js#L122))。そして、 'count()'を追加すると、大幅に節約していることは明らかです(speed test [here](https://gist.github.com/jmikola/5208918)を参照してください)。 – rubie

答えて

0

カウントを追加してください。カーソル自体が返されるので、カーソルは常に真実の値になります。何のドキュメントが返されないので、あなたが

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

...ので、カーソルに含まれるレコードをチェックする必要があることは0と0で、これが唯一の文書が発見された場合

0

アイデアに基づいていることを私の理解であります特定のプロパティに対する特定の値を持つドキュメント。あなたは使用できます:

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

Mongoのカーソルが同じように動作するように見える返す必要がありますfalseyです空のカーソル(および空の配列)がtrueと評価されるという点で配列として使用されます。

従って!![] //trueおよび!!collection.find({text : "alosh"}) //true

しかしcollection.findOne({text : "alosh"})はあなたifに失敗します - ので、あなたの編集に十分なその代わり

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

関連する問題