C# Mongo Driver error: Cannot deserialize a 'Int32' from BsonType 'Document'
C# Mongo Driver error: Cannot deserialize a 'Int32' from BsonType 'Document'
以下 MongoDB 查询 运行 在 Robo3T 1.2 上很好并且 return 正确 'count'。
db.runCommand( {
aggregate: "User",
pipeline: [
{$unwind: '$UserSubscriptions'},
{$group: {
_id: '$_id',
codes: {$addToSet: '$UserSubscriptions.Subscription.Publication'}
}},
{$unwind: '$codes'},
{$group: {
_id: '$codes',
count: {$sum: 1}
}}
]
} )
我正在尝试将上述查询转换为 C# MongoDriver 查询,如下所示
var unwind = new BsonDocument { { "$unwind", "$UserSubscriptions" } };
var group1 = new BsonDocument
{
{ "$group",
new BsonDocument
{
{ "_id", new BsonDocument
{
{
"Id","$_id"
}
}
},
{
"codes", new BsonDocument
{
{
"$addToSet","$UserSubscriptions.Subscription.Publication.Code"
}
}
}
}
}
};
var unwindCode = new BsonDocument { { "$unwind", "$codes" } };
var group2 = new BsonDocument
{
{ "$group",
new BsonDocument
{
{ "_id", new BsonDocument
{
{
"Id","$codes"
}
}
},
{
"codes", new BsonDocument
{
{
"$sum",1
}
}
}
}
}
};
var pipeline = new[] { unwind, group1 , unwindCode , group2 };
var result = coll.Aggregate<T>(pipeline);
但是出现错误 无法从 BsonType 'Document'.
反序列化一个 'Int32'
Id 是集合中的主键
public int Id { get;放; }
请告知如何实现。
(机器人 3T 1.2.1) (MongoDB.Driver 2.4.4)
您正在尝试通过为“_id”创建 BsonDocument 将 BsonDocument 反序列化为 'Int32'。你只需要这样做:
var group1 = new BsonDocument
{
{
"$group", new BsonDocument
{
{
"_id", "$_id"
},
{
"codes", new BsonDocument
{
{
"$addToSet", "$UserSubscriptions.Subscription.Publication.Code"
}
}
}
}
}
};
var group2 = new BsonDocument
{
{
"$group", new BsonDocument
{
{
"_id", "$codes"
},
{
"count", new BsonDocument
{
{
"$sum", 1
}
}
}
}
}
};
以下 MongoDB 查询 运行 在 Robo3T 1.2 上很好并且 return 正确 'count'。
db.runCommand( {
aggregate: "User",
pipeline: [
{$unwind: '$UserSubscriptions'},
{$group: {
_id: '$_id',
codes: {$addToSet: '$UserSubscriptions.Subscription.Publication'}
}},
{$unwind: '$codes'},
{$group: {
_id: '$codes',
count: {$sum: 1}
}}
]
} )
我正在尝试将上述查询转换为 C# MongoDriver 查询,如下所示
var unwind = new BsonDocument { { "$unwind", "$UserSubscriptions" } };
var group1 = new BsonDocument
{
{ "$group",
new BsonDocument
{
{ "_id", new BsonDocument
{
{
"Id","$_id"
}
}
},
{
"codes", new BsonDocument
{
{
"$addToSet","$UserSubscriptions.Subscription.Publication.Code"
}
}
}
}
}
};
var unwindCode = new BsonDocument { { "$unwind", "$codes" } };
var group2 = new BsonDocument
{
{ "$group",
new BsonDocument
{
{ "_id", new BsonDocument
{
{
"Id","$codes"
}
}
},
{
"codes", new BsonDocument
{
{
"$sum",1
}
}
}
}
}
};
var pipeline = new[] { unwind, group1 , unwindCode , group2 };
var result = coll.Aggregate<T>(pipeline);
但是出现错误 无法从 BsonType 'Document'.
反序列化一个 'Int32'Id 是集合中的主键
public int Id { get;放; }
请告知如何实现。
(机器人 3T 1.2.1) (MongoDB.Driver 2.4.4)
您正在尝试通过为“_id”创建 BsonDocument 将 BsonDocument 反序列化为 'Int32'。你只需要这样做:
var group1 = new BsonDocument
{
{
"$group", new BsonDocument
{
{
"_id", "$_id"
},
{
"codes", new BsonDocument
{
{
"$addToSet", "$UserSubscriptions.Subscription.Publication.Code"
}
}
}
}
}
};
var group2 = new BsonDocument
{
{
"$group", new BsonDocument
{
{
"_id", "$codes"
},
{
"count", new BsonDocument
{
{
"$sum", 1
}
}
}
}
}
};