我正在尝试进行多字段“不同”查询,这当然是不可能的 (见我在这里的尝试:Selecting a new type from linq query)
在我意识到这一点之后,我发现我能够通过使用.group和MongoDB来检索我需要的数据。
有没有办法在MongoDB C#wrapper中使用以下查询/命令?
disciplines = db.result.group({
key: {DisciplineName:1, DisciplineCode:1},
reduce: function(obj, prev) { if (!obj.hasOwnProperty("DisciplineName")) {
prev.DisciplineName = obj.DisciplineName;
prev.DisciplineCode = obj.DisciplineCode;
}},
initial: { }
});
我的Result
课程(文件)如下:
public class Result
{
public virtual int ResultId { get; set; }
public virtual string DisciplineCode { get; set; }
public virtual string DisciplineName { get; set; }
public virtual int CompetitorId { get; set; }
//other stuff
}
答案 0 :(得分:3)
决定使用:
var initial = new BsonDocument();
//return a list of keys for the group
var keyFunction = (BsonJavaScript)@"function(doc) {
return {
DisciplineName : doc.DisciplineName,
DisciplineCode: doc.DisciplineCode
};
}";
var reduce = @"function(obj, prev) {
if (!obj.hasOwnProperty(""DisciplineName"")) {
prev.DisciplineName = obj.DisciplineName;
prev.DisciplineCode = obj.DisciplineCode;
}
}";
var bsonDocs = _db.GetCollection("result").Group(Query.Exists("DisciplineName"), keyFunction, initial, reduce, null).ToArray();
//I hate this!!
var disciplines = new List<Discipline>();
foreach (var item in bsonDocs)
disciplines.Add(BsonSerializer.Deserialize<Discipline>(item));
我真的不喜欢迭代IEnumerable<BsonDocument>
以将每个序列化为Discipline
对象的方式。
如果可以反序列化BsonDocuments集合
,则会更新