C# 如何在C中应用MongoDb集合之间的联接
我用一个简单的例子来说明我的问题,C中有两个类C# 如何在C中应用MongoDb集合之间的联接,c#,mongodb,asp.net-core-2.0,C#,Mongodb,Asp.net Core 2.0,我用一个简单的例子来说明我的问题,C中有两个类 class Table1 { [BsonId] public ObjectId _Id { get; set; } [BsonElement] public string Name { get; set; } } class Table2 { [BsonId] public ObjectId _Id { get; set; }
class Table1
{
[BsonId]
public ObjectId _Id { get; set; }
[BsonElement]
public string Name { get; set; }
}
class Table2
{
[BsonId]
public ObjectId _Id { get; set; }
[BsonElement]
public int Age { get; set; }
[BsonElement]
public ObjectId UserId { get; set; }
}
以下是MongoDB中的数据:
表1:
{id:5bbd9b904b235724d42d61b1,名称:User1}
表2:
{id:5bbd9bad4b235724d42d61b2,年龄:25,用户id:5bbd9b904b235724d42d61b1}
现在加入c控制台应用程序
static void ViewRecords()
{
MongoContext db = new MongoContext();
var Table1 = db._database.GetCollection<Table1>("Table1");
var Table2 = db._database.GetCollection<Table2>("Table2");
var r = from t1 in Table1.AsQueryable()
join t2 in Table2.AsQueryable() on t1._Id equals t2.UserId into result
select new Table1()
{
_Id = t1._Id,
Name = t1.Name
};
foreach (var a in r)
{
Console.WriteLine(a.Name);
}
}
现在它正在抛出异常
不支持GroupJoin查询运算符
我所关注的链接:
我已经通过nuget软件包管理器安装了mongocsharpdriver 2.7.0和MongoDB.Driver 2.7.0。
在过去的两天里,我的头都撞到墙上了。。非常感谢您的支持。当我一次又一次地尝试时,我发现了一些非常有趣的东西。经过几次重大改变后,同样的方法似乎运行良好。 1.将MongoClient更改为IMongoClient,将MongoDatabase更改为IMongoDatabase
public class MongoContext
{
IMongoClient _client;
public readonly IMongoDatabase _database;
public MongoContext()
{
//Reading credentials from Web.config file
_client = new MongoClient("mongodb://" + ConfigurationManager.AppSettings["MongoHost"] + ":" + ConfigurationManager.AppSettings["MongoPort"]);
_database = _client.GetDatabase(ConfigurationManager.AppSettings["MongoDatabaseName"]);
}
}
我需要从上下文类中删除MongoServer
将ViewRecords方法更改为以下内容:
static List<Table1> ViewRecords()
{
try
{
MongoContext db = new MongoContext();
IMongoCollection<Table1> = db._database.GetCollection<Table1>("Table1");
IMongoCollection<Table2> = db._database.GetCollection<Table2>("Table2");
var r = from t1 in Table1.AsQueryable()
join t2 in Table2.AsQueryable() on t1._Id equals t2.UserId
select new Table1()
{
_Id = t1._Id,
Name = t1.Name
};
return r.ToList();
}
catch (Exception ex) { throw ex; }
}
现在它成功了。。我从一些博客中得到了这个提示,如果我再次发现相同的链接,我将与大家分享。BTW-如果你没有使用表2中的任何内容,为什么要加入?@GiladGreen,我们只需要基于内部连接的表1数据…虽然我们也可以使用结果,但我只想知道为什么它不起作用。@S.Akbari,是否还有其他方法可以实现这些结果?连接是针对关系数据库的,文档数据库不应该有连接。您应该在C代码中运行DoyouJoins,使用C代码连接两个集合时不必转换为AsQueryable