如何使用 MongoDB C# 驱动程序进行 $lookup?
How to $lookup with MongoDB C# driver?
如何使用 MongoDB C# 驱动程序执行 $lookup?我在他们的驱动程序文档中找不到它:
https://docs.mongodb.org/getting-started/csharp/query/
但如果我在他们的JIRA中正确理解这张票,它应该在2.2版本的驱动程序中:
如果您在 IMongoCollection 上使用 AsQueryable() 扩展方法,则可以使用 LINQ 接口作为示例。
var query = from p in collection.AsQueryable()
join o in otherCollection on p.Name equals o.Key into joined
select new { p.Name, AgeSum: joined.Sum(x => x.Age) };
这是从 mongodb csharp 驱动程序文档中复制的 http://mongodb.github.io/mongo-csharp-driver/2.2/reference/driver/crud/linq/#lookup
您也可以使用 collection.Aggregate().Lookup() 方法或将查找添加到聚合阶段来实现。
collection.Aggregate()
.Lookup("foreignCollectionName", "localFieldName", "foreignFieldName", "result");
问题是查找需要投影
Collection.Aggregate().Lookup("foreignCollectionName", "localFieldName", "foreignFieldName","result").Project(Builders<BsonDocument>.Projection.Exclude("_id"))
.ToList()
然后你需要它转换成JSON
String ConvertToJson= res[0].AsBsonDocument.ToJson();
String resultsConvertToJson = ConvertToJson.ToJson();
然后使用BSONSerialize,放入C#强类型集合
List<TModel> results= BsonSerializer.Deserialize<List<TMModel>>(resultsConvertToJson);
这对我有用:
var collection2 = database.GetCollection<BsonDocument>("dbACESSO");
var match1 = new BsonDocument("$match", new BsonDocument("PartnerId", cliente));
var match2 = new BsonDocument("$match", new BsonDocument("CD_CLIENTE", codCond));
var lookup1 = new BsonDocument { { "$lookup", new BsonDocument { { "from", "GRUPO_UNIDADE" }, { "localField", "CD_GRUPO_UNIDADE" }, { "foreignField", "CD_GRUPO_UNIDADE" }, { "as", "GRUPO" } } } };
var pipeline = new[] { match1, match2, lookup1 };
var result = collection2.Aggregate<BsonDocument>(pipeline).ToList();
除了那些人已经提到的以外,还有一个类型安全的重载可用于您可以使用的查找方法。
Lookup是本地集合的扩展方法,接受4个参数,第一个是外部集合,第二个是本地字段的表达式,第三个是外部字段的表达式,第四个是一个将联接结果映射到输出类型中的字段的表达式。
_fromTypeCollection.Aggregate<fromType>()
.Lookup<fromType,targetType,outputType>(targetTypeCollection,
fromType => fromType.localFeild,
targetType => targetType.foreignField,
outputType => outputType.result);
如何使用 MongoDB C# 驱动程序执行 $lookup?我在他们的驱动程序文档中找不到它:
https://docs.mongodb.org/getting-started/csharp/query/
但如果我在他们的JIRA中正确理解这张票,它应该在2.2版本的驱动程序中:
如果您在 IMongoCollection
var query = from p in collection.AsQueryable()
join o in otherCollection on p.Name equals o.Key into joined
select new { p.Name, AgeSum: joined.Sum(x => x.Age) };
这是从 mongodb csharp 驱动程序文档中复制的 http://mongodb.github.io/mongo-csharp-driver/2.2/reference/driver/crud/linq/#lookup
您也可以使用 collection.Aggregate().Lookup() 方法或将查找添加到聚合阶段来实现。
collection.Aggregate()
.Lookup("foreignCollectionName", "localFieldName", "foreignFieldName", "result");
问题是查找需要投影
Collection.Aggregate().Lookup("foreignCollectionName", "localFieldName", "foreignFieldName","result").Project(Builders<BsonDocument>.Projection.Exclude("_id"))
.ToList()
然后你需要它转换成JSON
String ConvertToJson= res[0].AsBsonDocument.ToJson();
String resultsConvertToJson = ConvertToJson.ToJson();
然后使用BSONSerialize,放入C#强类型集合
List<TModel> results= BsonSerializer.Deserialize<List<TMModel>>(resultsConvertToJson);
这对我有用:
var collection2 = database.GetCollection<BsonDocument>("dbACESSO");
var match1 = new BsonDocument("$match", new BsonDocument("PartnerId", cliente));
var match2 = new BsonDocument("$match", new BsonDocument("CD_CLIENTE", codCond));
var lookup1 = new BsonDocument { { "$lookup", new BsonDocument { { "from", "GRUPO_UNIDADE" }, { "localField", "CD_GRUPO_UNIDADE" }, { "foreignField", "CD_GRUPO_UNIDADE" }, { "as", "GRUPO" } } } };
var pipeline = new[] { match1, match2, lookup1 };
var result = collection2.Aggregate<BsonDocument>(pipeline).ToList();
除了那些人已经提到的以外,还有一个类型安全的重载可用于您可以使用的查找方法。
Lookup是本地集合的扩展方法,接受4个参数,第一个是外部集合,第二个是本地字段的表达式,第三个是外部字段的表达式,第四个是一个将联接结果映射到输出类型中的字段的表达式。
_fromTypeCollection.Aggregate<fromType>()
.Lookup<fromType,targetType,outputType>(targetTypeCollection,
fromType => fromType.localFeild,
targetType => targetType.foreignField,
outputType => outputType.result);