假设我有以下文档结构:
{
"_id" : id,
"name" : "Tom Cruise",
"movies" : [
{
"movie_id" : id,
"name" : "Mission Impossible",
"yr_released": 1996
},
{
"movie_id" : id,
"name" : "Minority Report",
"yr_released": 2002
}
]
}
以下是我的POCO:
public class Actor
{
[BsonId]
public int Id { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("movies")]
public List<Movies> Movies { get; set; }
}
public class Movies
{
[BsonId]
public int Id { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("yr_released")]
public int YearReleased
}
让我们说第二天,文档得到更新,但最后一个电影名称从“少数派报告”改为“香草天空”。我想找出子文档中发生了哪些变化。这是我使用的示例代码(不起作用):
var yesterdayQuery = (yesterdayColl.AsQueryable<Actor>()
.Where (b => b.Name.Contains("Cruise"))).ToList();
var todayQuery = (todayColl.AsQueryable<Actor>()
.Where (b => b.Name.Contains("Cruise"))).ToList();
var diff = todayQuery.Except(yesterdayQuery);
由于Mongodb的C#驱动程序没有Except()支持,我认为如果我使用Linq to Objects作为解决方法,我将能够找到差异。我想我错了。基本上,我想在文件之间找到以下区别:
我的问题是:如何使用C#驱动程序(希望如此)编写强类型查询来实现此目的?
答案 0 :(得分:0)
我不熟悉MongoDB,但我认为你会像这样编写你的类:
public class Actor
{
// equal objects must have equal hash codes
public override int GetHashCode()
{
return Id.GetHashCode();
}
// objects with the same Id are equal
public override bool Equals(object obj)
{
Actor other = obj as Actor;
if (other == null)
return false;
return this.Id == other.Id;
}
[BsonId]
public int Id { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("movies")]
public List<Movies> Movies { get; set; }
}
答案 1 :(得分:0)
如果您想知道更改而不仅仅如果它已被更改,那么它不是真正的MogngoDB问题。 您需要2份数据。然后你需要按属性去属性(如果你希望它更通用,可以使用反射)并获得新值。 旧副本可以保存在DB中,新副本只能保存在内存中。