我在MongoDB中列出了公司股价。每个文档如下所示:
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: EncodeHttpParamsInterceptor,
multi: true
}
]
当然,数据库中有很多这样的文档。 我需要以不同的方式获取符号和公司名称的列表,例如我想要这个:
{
"_id":"5b93f2719c02f096d5cb9608",
"dateString":"2018-09-07",
"close":260.87,
"companyName":"Adobe Systems, Inc.",
"high":263.67,
"low":257.12,
"open":258,
"symbol":"ADBE",
"timestamp":1536296400
}
我找到了一种只为一个字段获取不同值的方法,像这样:
List<BsonDocument> {
{ "symbol": "ADBE", "companyName": "Adobe Systems, Inc." },
{ "symbol": "MCO", "companyName": "Moody's Corp" }
...
}
但是有一种方法可以按2个字段进行不同的过滤吗? 这是C#mongodb驱动程序
p.s。我见过这个主题count multiple distinct fields by group with Mongo 但是我无法使其与C#驱动程序一起工作
答案 0 :(得分:0)
我已经这样解决了:
public List<SymbolItem> GetCompanySymbolItems() {
// https://docs.mongodb.com/manual/reference/operator/aggregation/group/
var result = new List<SymbolItem>();
m_CompanyCollection.Aggregate()
.Group(new BsonDocument("_id",
new BsonDocument {{"symbol", "$symbol"}, {"companyName", "$companyName"}}))
.ToList()
.ForEach(bson => {
var symbolData = bson["_id"];
result.Add(new SymbolItem {
Tag = symbolData["symbol"].AsString,
Name = symbolData["companyName"].AsString
});
});
return result;
}
现在我正在获得想要的结果
答案 1 :(得分:0)
db.col.aggregate([{
"$group": {
"_id": {
"symbol": "$symbol",
"companyName": "$companyName"
},
"occurrences": {
"$sum": 1
}
}
},
{
"$project": {
"symbol": "$_id.symbol",
"companyName": "$_id.companyName",
"occurrences": "$occurrences",
"_id": 0
}
}
])
答案 2 :(得分:0)