【发布时间】:2018-02-16 22:06:29
【问题描述】:
有人可以帮我将以下内容翻译成 mongodb 2.4 C# 驱动程序的代码吗?我一直试图让这个工作,但我很难弄清楚。当我通过 C# 驱动器运行以下 mongo 查询时,我没有得到任何记录。当我运行 mongo 命令行时,我得到了 2 条记录。 我只需要了解我在做什么会导致使用 C# 驱动程序时的行为差异。
到目前为止,我有以下 C# 驱动程序:
public IEnumerable<ComponentRecordDataModel> GetComponentRecords(
)
{
var componentTypeFilter = Builders<ComponentRecordDataModel>.Filter.Eq(x => x.ComponentType, "Investment");
var authorizedUserFilter =
Builders<ComponentRecordDataModel>.Filter.AnyEq(x => x.AuthorizedUserIds, "59e8c1d35e13de1494887658");
var componentFieldFilters = new List<FieldValueDataModel>
{
new FieldValueDataModel()
{
FieldId = "59d664d1c153f67518f98888",
Value = "gov"
},
new FieldValueDataModel()
{
FieldId = "59d664d1c153f67518f98889",
Value = "azure"
}
};
var componentFilters = new List<FilterDefinition<FieldValueDataModel>>();
foreach (var componentFieldFilter in componentFieldFilters)
{
var bsonRegex = new BsonRegularExpression(Regex.Escape(componentFieldFilter.Value), "i");
componentFilters.Add(Builders<FieldValueDataModel>.Filter.And(new[]
{
Builders<FieldValueDataModel>.Filter.Eq(x => x.FieldId, componentFieldFilter.FieldId),
Builders<FieldValueDataModel>.Filter.Eq(x => x.Value, bsonRegex)
}));
}
var fieldFilter = Builders<ComponentRecordDataModel>.Filter.ElemMatch(
x => x.Fields, Builders<FieldValueDataModel>.Filter.Or(componentFilters)
);
var filter = componentTypeFilter & authorizedUserFilter & fieldFilter;
var renderedFilter = filter.ToJson();
return MongoContext.Find(filter).ToList();
}
/我尝试复制的 mongodb 查询如下所示/
db.getCollection('componentRecords').aggregate(
[{
$match: {
"componentType": "Investment"
}
},
{
$match: {
"authorizedUserIds": {
$elemMatch: {
$in: ["59e8c1d35e13de1494887658"]
}
}
}
},
{
$match: {
"fields": {
$elemMatch: { $or:
[{ $and : [
{ fieldId: ObjectId("59d664d1c153f67518f98888") },
{ value: { "$regex": "gov", '$options' : 'i' } }
]},
{ $and : [
{ fieldId: ObjectId("59d664d1c153f67518f98889") },
{ value: { "$regex": "azure", '$options' : 'i' } }
]}
]
}
}
}
}
])
【问题讨论】:
-
到目前为止你翻译了什么?你能提供sn-ps吗?
-
SO 不会将代码从一种语言翻译成另一种语言。请表现出你的努力,非常好的人会很荣幸能帮助你。
-
你能添加几个示例文件和 poco 吗?你能确认
fieldId是objectID 而authorizedUserIds是十六进制字符串吗?
标签: c# .net mongodb mongodb-query mongodb-.net-driver