ElemMatch我正在嘗試在C#中搜索時間間隔。我感興趣的領域由簡單的物件或物件陣列組成,如下所示:
{
"ID": "123456789",
"field1": {
"item1": "string",
"item2": 123
}
"field2": [
{
"item11": 11.11,
"myDatetime": {
ts: 2022-10-23T23:14:55
}
},
{
"item11": 12.22,
"myDatetime": {
ts: 2022-08-23T23:14:55
}
}
]
}
我的模型是這樣的:
public record MongoCollection
{
public string ID { get; init; }
public object field1 { get; init; }
public List<object> field2 { get; init; }
}
我正在嘗試以ElemMatch這種方式部署:
var filter = Builders<MongoCollection>.Filter.ElemMatch("field1",
Builders<MongoCollection>.Filter.And(
Builders<MongoCollection>.Filter.Gte("myDatetime.ts", fromDate),
Builders<MongoCollection>.Filter.Lte("myDatetime.ts", tillDate))
);
我在這部分代碼中收到的錯誤是:
Unable to cast object of type 'MongoDB.Bson.Serialization.Serializers.ObjectSerializer' to type 'MongoDB.Bson.Serialization.IBsonSerializer
我也嘗試過這種方法:
var field = new StringFieldDefinition<MongoCollection, List<object>>("field1");
和
FieldDefinition<MongoCollection,List<object>> field = "field1";
我這樣field輸入:ElemMatch
var filter = Builders<MongoCollection>.Filter.ElemMatch(field,
Builders<MongoCollection>.Filter.And(
Builders<MongoCollection>.Filter.Gte("myDatetime.ts", fromDate),
Builders<MongoCollection>.Filter.Lte("myDatetime.ts", tillDate))
);
我收到了同樣的錯誤。我該如何解決?
uj5u.com熱心網友回復:
你應該參考
field2但不是field1。就像在
MongoCollection類中的專案field2是object型別一樣,嵌套物件的過濾器應該object使用Builders<object>.
var filter = Builders<MongoCollection>.Filter.ElemMatch("field2",
Builders<object>.Filter.And(
Builders<object>.Filter.Gte("myDatetime.ts", fromDate),
Builders<object>.Filter.Lte("myDatetime.ts", tillDate))
);

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/525960.html
