私が使用しているデータベースにオブジェクトが存在するかどうかを知る必要があります。私は結果がゼロであるかどうかをテストするためにquery.countを使用できることを知っています。しかし、誰かがカウントが高価だと私に言ったので、私はquery.firstがより効率的かもしれないと思います。それは本当ですか、そして、dbのオブジェクトの存在をテストする最良の方法は何ですか?find、count、またはfirstを使用して存在をテストする
0
A
答えて
0
クエリは、最初のあなたが見つけると、あなたはいくつかのコードを示した場合、それが参考になるより0か
0
場合Array.lengthとを使用して、配列の長さをテストするクエリを使用することができ、あなたの結果をカウントされませんが、これはありますあまりにも楽しい質問を渡す。
以下のテストコードですが、私の非科学的な答えは、クエリの索引付けが適切であれば、どのメソッドを使用するかは関係ありません。大量のオブジェクトを数えているときには数が高価ですが、検索しようとしていてクエリのインデックスが作成されていると、高価になるとは思われません。
これでコードが完成しました。私は、私が存在をテストするために考えることができる3つの異なる方法をテストするために、私のパースサーバーレポで単体テストをいくつか調理しました。 3つのケースすべてで、私は特別なobjectIdを使用していますので、簡単に調整できます。私はまた、それぞれのテストを1回だけ行いますが、それについて科学的にするには、それぞれ100回程度、平均したいと思います。しかし、クエリキャッシングについて考える必要があるので、単純にしておき、同じパターンを使って自分のデータで実際にテストすることができます。
[OK]を、今私はすべての私の警告を与えてくれたこと:
describe('way to find if an object exists....', function() {
beforeEach(function (done) {
new Parse.Object('Test')
.save()
.then((testObj) => {
this.testObj = testObj;
done();
})
.catch(done.fail);
});
it('should use get if we know object id', function(done) {
this.start = new Date();
new Parse.Query('Test').get(this.testObj.id)
.then(result => {
console.log('get time exists', new Date() - this.start);
return expect(result.id).toBe(this.testObj.id);
})
.then(() => {
this.start = new Date();
return new Parse.Query('Test').get('not the id');
})
.then(
() => done.fail('we shouldn\'t get here, cause the obj doesn\'t exist'),
// so if the get is rejected you know it doesn't exist.
e => {
console.log('get time does not exist', new Date() - this.start);
expect(e).toEqual(new Parse.Error(101, 'Object not found.'));
})
.then(done)
.catch(done.fail);
});
it('should also work with find', function (done) {
this.start = new Date();
new Parse.Query('Test')
.equalTo('objectId', this.testObj.id)
.find()
.then(result => {
console.log('find time exists', new Date() - this.start);
return expect(result.length).toBe(1);
})
.then(() => {
this.start = new Date();
return new Parse.Query('Test')
.equalTo('objectId', 'not the id')
.find();
})
.then((result) => {
console.log('find time does not exist', new Date() - this.start);
expect(result.length).toEqual(0);
})
.then(done)
.catch(done.fail);
});
it('should also work with count', function (done) {
this.start = new Date();
new Parse.Query('Test')
.equalTo('objectId', this.testObj.id)
.count()
.then(result => {
console.log('count time exists', new Date() - this.start);
return expect(result).toBe(1);
})
.then(() => {
this.start = new Date();
return new Parse.Query('Test')
.equalTo('objectId', 'not the id')
.count();
})
.then((result) => {
console.log('count time does not exist', new Date() - this.start);
expect(result).toEqual(0);
})
.then(done)
.catch(done.fail);
});
});
この結果得た:
Jasmine started
way to find if an object exists....
✓ should use get if we know object id
get time exists 19
get time does not exist 8
✓ should also work with find
find time exists 12
find time does not exist 9
✓ should also work with count
count time exists 7
count time does not exist 6
だから私の素敵な空の中を、メモリモンゴで、そのすべての超高速燃えます(これらはミリ秒です)、クエリが適切に索引付けされていると仮定すると、最もわかりやすいコードを生成するものを選択してください;)
関連する問題
- 1. ActiveResource Get Callはどのようにしてfind(:first)またはfind(:last)リクエストを表示しますか?
- 2. .findを使用して.find
- 3. JQを使用したキーの存在または非存在に作用
- 4. My First Class - Count Twitter Reactions
- 5. Codeceptionを使用して存在規則を持つLaravel 5ルートをテストする
- 6. EF Count()> 0しかしFirst()例外をスローする
- 7. breadth-firstファイルを 'find'または他のツールで検索できますか?
- 8. アクティブレコード有効なレコードが存在する場合、 `find`はnilを返します。
- 9. PHPでoracleを使用して「テーブルまたはビューが存在しません」
- 10. ジキルを使用してファイルの存在を確認します
- 11. rubyを使用したORオプションが存在しますか? "
- 12. グループ化されたサブセットに存在するかどうかを示すSELECTを使用して存在をテストする
- 13. UNIX find:-newerオプションの反対側に存在しますか?
- 14. COUNT()を使用したSQLを使用したSQL
- 15. jQueryを使用して要素がiFrameに存在するかどうかをテストする方法は?
- 16. SQL文を使用してテーブルにカラムが存在するかどうかをテストするには
- 17. XCUIElementsQueryを使用してUIViewの存在をテストするにはどうすればよいですか?
- 18. Spring MVCテスト(セキュリティ統合テスト)、JSESSIONIDは存在しません
- 19. ストアドプロシージャからストアドプロシージャを呼び出すまたはCOUNTを使用して
- 20. Borda CountはPythonを使用していますか?
- 21. Scalaqueryでテーブル/ビューの存在をテストします。存在しない場合は作成します。
- 22. COUNT()を使用した計算
- 23. findを使用したrfindの実装
- 24. モデルのカスタム検証ルール内でfind( 'first')を実行する
- 25. Dropbox SDKを使用したフォルダの存在を確認する
- 26. プロパティ 'count'が型 '{}'に存在しません
- 27. サブプロセスアプローチ(プレーングリッドまたはジェンキンを使用)を使用してセレングリッドを使用してテストを配布する
- 28. ファイルまたはディレクトリが存在する場合、RewriteCondを使用してルールをスキップします
- 29. findを使用して定数を初期化しますか?
- 30. UNIX findを使用してfind(file1 OR file2)を検索する方法?
私は存在のみをテストする必要があります。結果の数は必要ありません –