Mongo DB c# 查询嵌套数组中所有元素的 属性
Mongo DB c# query ALL element's property in nested array
我正在尝试获取具有特定条件的过滤器,以获取具有内部文档数组且具有 属性:
的文档
public class MyObject {
public List<InnerObject> InnerObjects {get;set;}
}
public class InnerObject {
public bool Accepted {get;set;}
}
现在我想查询所有 MyObjects
的 ALL 内部对象 Accepted 设置为特定值,在这种情况下为 FALSE。我构建了过滤器:
filter = Builders<MyObject>.Filter.ElemMatch(
c => c.InnerObjects,
Builders<InnerObject>.Filter.Eq(c => c.Accepted, false));
这不起作用,因为它也将 return MyObjects 的任何 InnerObject 实例也设置为 true,我可以理解。问题是我找不到任何操作员可以实现我想要实现的目标。请注意,我还想有一个过滤器,其中至少有一个 InnerObject 接受特定值(实际上上面的过滤器会实现这一点),所以我唯一的问题是让对象 ALL InnerObject.Accepted
的实例设置为 TRUE 或 FALSE.
如何实现?
您需要执行相反的操作才能实现。请将查询翻译成 C# 语法。
db.collection.find({
"InnerObject.Accepted": {
$not: {
$eq: true
}
}
})
游乐场:https://mongoplayground.net/p/SgEpt96uxdb
遵循 C# 语法(请遵循最佳实践和良好的 OO 原则)
var notAccepted = Builders<InnerObject>.Filter.Not(
Builders<InnerObject>.Filter.Eq(u => u.Accepted, false)
);
IMongoCollection<MyObject> myobjectsCollection = null;
myobjectsCollection.Find(Builders<MyObject>.Filter.ElemMatch(x => x.InnerObjects, notAccepted));
我正在尝试获取具有特定条件的过滤器,以获取具有内部文档数组且具有 属性:
的文档public class MyObject {
public List<InnerObject> InnerObjects {get;set;}
}
public class InnerObject {
public bool Accepted {get;set;}
}
现在我想查询所有 MyObjects
的 ALL 内部对象 Accepted 设置为特定值,在这种情况下为 FALSE。我构建了过滤器:
filter = Builders<MyObject>.Filter.ElemMatch(
c => c.InnerObjects,
Builders<InnerObject>.Filter.Eq(c => c.Accepted, false));
这不起作用,因为它也将 return MyObjects 的任何 InnerObject 实例也设置为 true,我可以理解。问题是我找不到任何操作员可以实现我想要实现的目标。请注意,我还想有一个过滤器,其中至少有一个 InnerObject 接受特定值(实际上上面的过滤器会实现这一点),所以我唯一的问题是让对象 ALL InnerObject.Accepted
的实例设置为 TRUE 或 FALSE.
如何实现?
您需要执行相反的操作才能实现。请将查询翻译成 C# 语法。
db.collection.find({
"InnerObject.Accepted": {
$not: {
$eq: true
}
}
})
游乐场:https://mongoplayground.net/p/SgEpt96uxdb
遵循 C# 语法(请遵循最佳实践和良好的 OO 原则)
var notAccepted = Builders<InnerObject>.Filter.Not(
Builders<InnerObject>.Filter.Eq(u => u.Accepted, false)
);
IMongoCollection<MyObject> myobjectsCollection = null;
myobjectsCollection.Find(Builders<MyObject>.Filter.ElemMatch(x => x.InnerObjects, notAccepted));