【发布时间】:2017-09-12 18:14:22
【问题描述】:
我有一个 mongodb 集合,其中 userId 字段有时是 int,有时是字符串。 (55 或“55”)
使用 .NET 驱动程序,我基于 MongoDBLogEntry 类创建查询部分:
var filters = new List<FilterDefinition<MongoDBLogEntry>>();
foreach (var docFilter in docFilters)
{
var key = docFilter.Key; // Example: "userId"
var value = docFilter.Value; // Example: "55"
FilterDefinition<MongoDBLogEntry> filter;
if (key.EndsWith("Id"))
{
var intfilter = builder.Eq(key, BsonInt32.Create(Convert.ToInt32(value)));
var stringFilter = builder.Eq(key, value);
var orFilter = builder.Or(intfilter, stringFilter);
filter = orFilter;
}
else
{
filter = builder.Eq(docFilter.Key, value);
}
filters.Add(filter);
}
因为我的数据对于某些字段具有字符串或 int,所以我的 MongoDBLogEntry 类将 userId 字段定义为字符串,并在这些字段上使用 StringOrIntSerializer : SerializerBase<string> 序列化程序。
我的问题是为 id 字段之一创建的查询是:
{ "$or" : [{ "userId" : "55" }, { "userId" : "55" }] }
我还尝试了$in 子句,它最终也是两个字符串值"55", "55"
我认为我明白为什么将它们转换为字符串...因为我的MongoDBLogEntry 类以这种方式定义字段并将所有值转换为字符串。
但是有没有办法让我使用上面的代码将int 强制加入查询中?
【问题讨论】:
-
我想我知道答案,但是......你能不能改变你的数据模型来正确输入任何给定字段的字符串或整数数据?
标签: mongodb mongodb-query mongodb-.net-driver