Mongodb高手 关联查询怎么实现啊

尐孑 2011-10-09 03:45:33
我用的是C# 官方的驱动 关联查询怎么实现啊 高手指点一下
...全文
2105 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
尐孑 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wwwwa 的回复:]

呵呵,有一定影响,建立索引试试,在关系型数据库中1条SQL语句解决,呵呵
[/Quote]
没好办法就结贴了
WWWWA 2011-10-10
  • 打赏
  • 举报
回复
呵呵,有一定影响,建立索引试试,在关系型数据库中1条SQL语句解决,呵呵
尐孑 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wwwwa 的回复:]

引用 4 楼 meixiafeng 的回复:
还有更好的方法吗

呵呵,没有,NOSQL是这样的
[/Quote]
这样不是影响数据访问效率了吗
WWWWA 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 meixiafeng 的回复:]
还有更好的方法吗
[/Quote]
呵呵,没有,NOSQL是这样的
尐孑 2011-10-10
  • 打赏
  • 举报
回复
还有更好的方法吗
WWWWA 2011-10-10
  • 打赏
  • 举报
回复
转:
MongoDB关联查询 c# 非linq

2011-09-16 17:28:41| 分类: MongoDB
|字号
订阅


简要说明:
本例采用先查出第一个数据集,然后遍历第一个数据集,在其中执行第二次查询,从而得出关联数据。当然第一个数据集就相当于“主表”数据,而查出的关联数据也就相当于“子表”数据。
代码示例:
/// <summary>
/// 根据姓名获取用户信息
/// </summary>
/// <param name="mUserInfo">用户Model类</param>
/// <returns>用户泛型集合</returns>
public List<UserInfo> GetUserByName(UserInfo mUserInfo)
{
List<UserInfo> lsUser = new List<UserInfo>();
using (Mongo mongo = new Mongo("mongodb://localhost"))
{
MongoDatabase mongoDatabase = mongo.GetDatabase("UserInfo") as MongoDatabase;
MongoCollection<Document> mongoCollection = mongoDatabase.GetCollection<Document>("myCollection") as MongoCollection<Document>;
mongo.Connect();
MongoRegex reg = new MongoRegex(".*" + mUserInfo.Name + ".*", MongoRegexOption.IgnoreCase);
Document docName = new Document { { "Name", reg } };
MongoDB.ICursor<Document> users = mongoCollection.Find(docName);
foreach (Document user in users.Documents)
{
UserInfo rmUserInfo = new UserInfo();

MongoDatabase mongoDbUserEnglishName = mongo.GetDatabase("UserEnglishName") as MongoDatabase;
MongoCollection<Document> mongoCollectionUserEnglishName = mongoDbUserEnglishName.GetCollection<Document>("myCollection") as MongoCollection<Document>;
Document docQueryUserEnglishName = new Document { { "Name", user["Name"].ToString() } };
Document UserEnglishName = mongoCollectionUserEnglishName.FindOne(docQueryUserEnglishName);

if (!string.IsNullOrEmpty(UserEnglishName["EnglishName"].ToString()))
rmUserInfo.EnglishName = UserEnglishName["EnglishName"].ToString();

rmUserInfo.FirstName = user["FirstName"].ToString();
rmUserInfo.LastName = user["LastName"].ToString();
rmUserInfo.CorporationName = user["CorporationName"].ToString();
rmUserInfo.Phone = user["Phone"].ToString();
rmUserInfo.Email = user["Email"].ToString();
rmUserInfo.UserType = user["UserType"].ToString();
lsUser.Add(rmUserInfo);
}
}

return lsUser;
}
代码说明:
本例中,UserInfo和UserEnglishName根据“Name“关联,“Name“要求唯一。
UserInfo中包含用户各种信息,而UserEnglishName中只有“Name”跟“EnglishName”,本例先查出UserInfo,后遍历UserInfo,然后根据“Name“查出UserEnglishName中的“EnglishName“,然后全都加到lsUser(用户泛型集合)中,返回lsUser

本文所用驱动为:MongoDBDriver-Release-0.90.0-Beta-1
WWWWA 2011-10-10
  • 打赏
  • 举报
回复
转:
linq 关联查询


可得会在以后的实体类中能用到

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;

namespace test2
{
class Student
{
public string First { get; set; }
public string Last { get; set; }
public int ID { get; set; }
public string Street { get; set; }
public string City { get; set; }
public List<int> Scores;

}

class Teacher
{
public string First { get; set; }
public string Last { get; set; }
public int ID { get; set; }
public string City { get; set; }

}

public partial class _Default : System.Web.UI.Page
{




protected void Page_Load(object sender, EventArgs e)
{
List<Student> students = new List<Student>()
{
new Student {First="张",
Last="三",
ID=111,
Street="123 Main Street",
City="太原",
Scores= new List<int> {97, 92, 81, 60}},
new Student {First="李",
Last="四",
ID=112,
Street="124 Main Street",
City="太原",
Scores= new List<int> {75, 84, 91, 39}},
new Student {First="王",
Last="五",
ID=113,
Street="125 Main Street",
City="上海",
Scores= new List<int> {88, 94, 65, 91}},
};

List<Teacher> teachers = new List<Teacher>()
{
new Teacher {First="李", Last="老师", ID=945, City = "太原"},
new Teacher {First="赵", Last="老师", ID=956, City = "郑州"},
new Teacher {First="秦", Last="老师", ID=972, City = "北京"}
};

// 相当于sql union 关联
var peopleInSeattle = (from student in students
where student.City == "太原"
select student.First+student.Last)

.Concat(from teacher in teachers
where teacher.City == "太原"
select teacher.First+teacher.Last);



this.Response.Write("老师和学生都生活在太原的是:<br />");
// Execute the query.
foreach (var person in peopleInSeattle)
{
this.Response.Write(person + "<br />");

}
//相当于sql inner
var query = students.AsQueryable().Join(teachers,
student => student.City,
teacher =>teacher.City,
(student, teacher) =>new { 老师姓名 = teacher.First+teacher.Last, 城市 = student.City,学生姓名=student.First+student.Last });

this.Response.Write("老师和学生都生活在同一城市的是:<br />");
foreach (var obj in query)
{
this.Response.Write(obj.老师姓名 + ","+ obj.城市+","+obj.学生姓名+"<br/>");
}

}
}

NBDBA 2011-10-09
  • 打赏
  • 举报
回复
貌似需要自己取出数据后用Linq关联

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧