0
我無法理解如何在Mongo C#2.4驅動程序中執行findOne
操作。Mongo C# - FindOne在哪裏?
我有一個超過910萬個平面文檔的集合。當我在Robomongo執行findOne
時,查詢需要0秒,並返回我想要的結果。
在C#中,這需要大約7-8秒。
目前我實現一個找到像這樣:
var result = await _collection.Find(filterDefinition).SingleAsync();
這需要7-8秒。
蒙戈查詢 - 找到一個 - 0秒
.findOne({ipFrom: { $lte: 1436497981 }, ipTo: { $gte: 1436497981 }});
蒙戈查詢 - 查找 - 7.4秒
.find({ipFrom: { $lte: 1436497981 }, ipTo: { $gte: 1436497981 }});
我不能IMongoCollection<>
找到一個FindOne
或FindOneAsync
方法,所以我很懷疑.Find(...).SingleAsync()
只是執行mongo find
函數。我可以看到有FindOneAndUpdate
,FindOneAndDelete
和FindOneAndReplace
,但沒有FindOne
。我使用的查詢
我的過濾器定義如下:
var filter = Builders<TLocationEntity>.Filter;
var filterDefinition = filter.And(
filter.Lte("ipFrom", ipValue),
filter.Gte("ipTo", ipValue)
);
基本上,什麼是做在C#驅動程序findOne
正確的方法是什麼?
好吧,從技術上說,shell中的'.findOne()'和其他所有API都是如此。你可以通過在''db.collection.findOne''中輸入''''而不用括號'()'來在shell中看到它。這將告訴你'.find()'實際上是底層API中唯一的實際調用。如果你想要「蘋果與蘋果」,你需要'.find({ipFrom:{$ lte:1436497981},ipTo:{$ gte:1436497981}})。limit(1)'基本上比較相同的東西。 –
@NeilLunn夠公平的,謝謝!自從我接觸Mongo後已經過了好幾年,所以我有點生疏了!在我的'.Find()'方法中加入'.Limit(1)'可以顯着提高性能。 – Tom
而這基本上就是'.SingleAsync()'和類似的東西。所以從技術上講,所有東西都只是一個「光標修飾符」,用於查找。 API已經發生了一些變化,通常會使這些語言更加一致。 –