【发布时间】:2016-06-09 12:52:07
【问题描述】:
如何将此 Mongo Shell 脚本转换为 MongoDB C# 驱动程序?
var myItems = []
var myCursor = db.Tickets.aggregate(
[
{ $match : { TicketProjectID : 49 } },
{ $project: { TicketProjectID:1, TicketID:1, concatValue: { $concat: [ "$Status", " - ", "$Name" ] } } }
// I will have a list of fields that I need to concatenate at run time. So C# query should support concatenation for "N" number of fields at run-time.
//{ $group: { _id: null, count: { $sum: 1 } } }
],
{ allowDiskUse: true }
)
//This seems like a ugly performance approach when we are working against 100k results with above match
while (myCursor.hasNext()) {
var item = myCursor.next();
if(item.concatValue.search(/mysearchkey/i) > -1)
{
myItems.push(item.TicketID)
}
}
myItems
或者有没有更好的方法在连接投影中进行字符串搜索,而不是在游标中进行 foreach,因为某些查询可能会获得 50k 条记录。
这是我迄今为止尝试过的,(不使用聚合)
注意:修剪此代码以适应公共问答网站。所以请将此视为伪代码
var tickets = ticketsCollection.FindSync(filter).ToList();
string concatinatedValue = string.Empty;
foreach (var ticket in tickets)
{
foreach (var field in customFieldsForThisProject)
concatinatedValue += ticket[field.Replace(" ", "_")];
if(concatinatedValue.StripHtml().contains("MysearchWord"))
{
TikectIdList.Add(ticket["TicketID"])
}
}
【问题讨论】:
-
@KDecker 更新了我尝试过的问题。我没有尝试将聚合与 C# 驱动程序一起使用。
标签: c# mongodb shell mongodb-.net-driver mongo-shell