1

だから私はこの列挙型を持っています

public enum JobStatus
{
    Created = 0,
    Assigning = 1,
    Assigned = 2,
    Started = 3,
    Finished = 4
}

このインターフェースでは

public interface IJob
{
    Guid Id { get; set; }
    JobStatus Status { get; set; }
    bool IsFaulted { get; set; }
    string ErrorMessage { get; set; }
}

私はこれらの人物の 1 人をデータベースに登録しましたが、うまくいきました。これがその外観です。

{ "_id" : { "$uuid" : "4e5002b6-3c80-b497-4a33-46b0ea5a39bf"} 
, "_t" : "MyJobObject" 
, "Status" : 0 
, "IsFaulted" : false 
, "ErrorMessage" :  null  
, "Location" : "overthere"}

次に、このコードで取得しようとすると

Database.GetCollection<IJob>("Jobs").AsQueryable().FirstOrDefault(x=>x.Status == JobStatus.Created);

それは例外をスローします

Unable to determine the serialization information for the expression: jobs.Status.
   at MongoDB.Driver.Linq.Utils.BsonSerializationInfoFinder.GetSerializationInfo(Expression node, Dictionary`2 serializationInfoCache)
   at MongoDB.Driver.Linq.Utils.BsonSerializationInfoHelper.GetSerializationInfo(Expression node)
   at MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(Expression variableExpression, ExpressionType operatorType, ConstantExpression constantExpression)
   at MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(BinaryExpression binaryExpression)
   at MongoDB.Driver.Linq.PredicateTranslator.BuildQuery(Expression expression)
   at MongoDB.Driver.Linq.SelectQuery.BuildQuery()
   at MongoDB.Driver.Linq.SelectQuery.Execute()
   at MongoDB.Driver.Linq.MongoQueryProvider.Execute(Expression expression)
   at MongoDB.Driver.Linq.MongoQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)

私の最初の試みでは、列挙型が整数に割り当てられていなかったので、同じ結果が得られました。これは、2 つの異なるマシンと、MongoDb の 2 つの新規インストール (1 つは Windows、もう 1 つは Ubuntu 12.04) で見られます。

これについて何をすべきかわからない、何かアイデアはありますか?

4

1 に答える 1

0

私はやった

Database.GetCollection<IJob>("Jobs").AsQueryable().ToEnumerable().FirstOrDefault(x=>x.Status == JobStatus.Created);

その時点ですべてのデータが引き出されているのではないかと少し心配ですが、問題なく動作します。とはいえ、遅くはないように見えます。ある時点で 50k を超えるレコードがありましたが、それが起こっていれば、パフォーマンスの低下が見られると思われるでしょう。

于 2013-04-30T20:03:32.620 に答える