代わりの
userProfiles.Find(filter.ToBsonDocument())
は
userProfiles.Find(filter)
を書いて、それが動作するはずです。
ToBsonDocument()
は、すべてのクラスマッピングとシリアライゼーション設定を考慮して、オブジェクトを取得してBson構造に変換する一般的な拡張メソッドです。それはFilterDefinitionタイプによって上書きないで、あなたのケースでのようないくつかのファンキーなフィルタを生産する効果的SimpleFilterDefinition`」の文字列値に「_t」フィールドを持っているすべてのドキュメントを検索するためにMongoDBを指示
{ "_t" : "SimpleFilterDefinition`2" }
2 "あなたのデータベースにはないと推測します - >結果は得られません。
EDIT:
ここでは、作品の完全な例です。
public class UserProfiles
{
public ObjectId Id;
public bool FirstBillRequestSent;
}
public class Program
{
public static IMongoDatabase _db;
public static async Task ProcessFirstTimeBillers()
{
var userProfiles = _db.GetCollection<UserProfiles>("UserProfiles");
var builder = Builders<UserProfiles>.Filter;
var filter = builder.Eq(x => x.FirstBillRequestSent, false);
using (var cursor = userProfiles.Find(filter).ToCursor())
{
while (await cursor.MoveNextAsync())
{
foreach (var doc in cursor.Current)
{
var jsonDoc = doc.ToJson();
var s = jsonDoc.ToString();
Console.WriteLine(s);
// prints something like:
// { "_id" : ObjectId("5944439d82d2e7265c86d50c"), "FirstBillRequestSent" : false }
// { "_id" : ObjectId("5944439d82d2e7265c86d50d"), "FirstBillRequestSent" : false }
// { "_id" : ObjectId("5944442b82d2e718d827d5d6"), "FirstBillRequestSent" : false }
}
}
}
}
static void Main(string[] args)
{
MongoClient client = new MongoClient();
_db = client.GetDatabase("test");
var collection = _db.GetCollection<UserProfiles>("UserProfiles");
collection.InsertOne(new UserProfiles { FirstBillRequestSent = true });
collection.InsertOne(new UserProfiles { FirstBillRequestSent = true });
collection.InsertOne(new UserProfiles { FirstBillRequestSent = true });
collection.InsertOne(new UserProfiles { FirstBillRequestSent = false });
collection.InsertOne(new UserProfiles { FirstBillRequestSent = false });
collection.InsertOne(new UserProfiles { FirstBillRequestSent = false });
ProcessFirstTimeBillers().Wait();
Console.ReadLine();
}
}
私はc#については考えていませんが、mongoシェルで同じクエリを実行するとどうなりますか? –
問題は、MongoDB C#ライブラリがEntity型のものでクエリをラップすることです。 私は次のようなことができます: db.UserProfiles.find({"Created":{$ lt:ISODate( "2017-05-10")}})pretty() カーソルがなくても私が望むものは多分です(おそらくMongoはカーソルを使ってfindを実装していますが、私には隠されています) – MPG
これはMongoのコマンドラインと同等です: db.UserProfiles.find( { "Created": { $ lt:ISODate( "2017-05-10") } } – MPG