![](/img/trans.png)
[英]Add item to nested array of nested object using MongoDB C# Driver
[英]Add item in nested array (mongodb and C#)
我有以下文件称为“出勤”
{
"_id" : ObjectId("5a4ffb00762caf6b54f61ebb"),
"AttnDate" : ISODate("2018-01-05T22:24:00.490Z"),
"AllAttendances" : [
{
"FullName" : "DOMAIN\Zack",
"Logged" : ISODate("2018-01-05T22:23:46.835Z"),
"Pauses" : [
{
PauseStartAt: ISODate("2018-01-05T22:30:46.835Z"),
PauseEndAt: ISODate("2018-01-05T22:35:46.835Z")
}
]
}
]
}
如何将新项目添加到“ 暂停”中 。 这是我的尝试,但我遇到此错误“无法将lambda表达式转换为类型'fielddefinition,因为它不是委托类型。
我的尝试
var filter = Builders<Attendance>.Filter.Eq(a => a.Id, currentAttn.Id) & Builders<Attendance>.Filter.ElemMatch(s => s.AllAttendances, Builders<TimeRecord>.Filter.Eq(n => n.FullName, userName));
var update = Builders<Attendance>.Update.Push(e => e.AllAttendances[-1].Pauses, pauses);
context.Attendances.FindOneAndUpdate(filter, update);
我遵循了本指南
出勤班
public class Attendance
{
[JsonConverter(typeof(ObjectIdConverter))]
public ObjectId Id { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime AttnDate { get; set; }
public List<TimeRecord> AllAttendances { get; set; }
}
TimeRecord类(所有出席情况)
public class TimeRecord
{
public string FullName { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime Logged { get; set; }
public List<Pause> Pauses { get; set; }
}
暂停类
public class Pause
{
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime PauseStartedAt { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime PauseEndedAt { get; set; }
}
您需要将过滤器更新为
var filter = Builders<Attendance>.Filter.Eq(a => a.Id, id) &
Builders<Attendance>.Filter.ElemMatch(s => s.AllAttendances, x => x.FullName == userName);
ElemMatch
的第一个参数是字段,第二个参数是过滤器。
从另一个角度来看,我建议您不要在c#中使用ObjectID。 我总是在模型中将ObjectId定义为字符串,并使用Bson属性修饰符在数据库中将其定义为ObjectId
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
纯粹是因为它导致尝试在C#中使用ObjectIds的痛苦。 字符串更容易处理。 您在mongodb中的文档看起来仍然相同,并且根本不需要在代码中将其转换为对象ID:
_id : ObjectId("xxxxxxx")
这应该可以帮助您解决编译器不知道如何进行转换的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.