- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如何将此 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 条记录。
这是我到目前为止尝试过的,(不使用聚合)
注意:修剪此代码以适合公共(public)问答站点。所以请将其视为伪代码
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"])
}
}
最佳答案
感谢@Nikola.Lukovic,在他的伪代码上工作,我想出了这个可行的解决方案。
方法一:完全使用 C# 驱动程序
var ticketsCollection = _mongoConnect.Database.GetCollection<BsonDocument>("Tickets");
var dbResult = from ticket in ticketsCollection.AsQueryable()
select new
{
TicketProjectID = ticket["TicketProjectID"],
TicketID = ticket["TicketID"],
ConcatValue = ticket["Status"] + (string) ticket["Name"]
};
var matches = from dbr in dbResult
where dbr.ConcatValue.Contains(searchKey)
where dbr.ConcatValue.StartsWith(searchKey)
select dbr;
This will not work for my scenario as fields I am trying to concatenate are if type string, but
$add
will only work withnumeric
anddate
types.
方法二:使用RunCommand
并直接传递 Shell 命令。 这适用于所有数据类型。也能满足我的需要。
var projectCommand =
BsonDocument.Parse(
"{ $project: { _id: -1, TicketProjectID:1, TicketID:1, concatValue: { $concat: [ \"$Status\", \" - \", \"$Name\" ] } } }");
var matchCommand =
BsonDocument.Parse("{ $match: {concatValue: { $regex: '" + searchKey + "', $options: 'i'} } }");
var pipeline = new[] {projectCommand, matchCommand};
var result = ticketsCollection.Aggregate<BsonDocument>(pipeline).ToList();
if (result.Count > 0)
return result.Select(x => (int)x["TicketID"]).ToList();
return null;
关于c# - MongoDB 聚合 Shell 脚本到 MongoC# Driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37726552/
如何使用 bcon_new 在 mongoC 中执行此查询? db.users.find({"name": /.*m.*/}) 最佳答案 经过几次尝试和错误,我终于找到了基于 libbson 类比的
MongoDB C++ driver允许创建BSON对象的两种方式(among others)。 基于流: auto builder = bsoncxx::builder::stream::docum
我正在尝试安装 Mongo Swift使用 cocoapods 的库,但遇到了一些问题。 正如文档所指出的,要使 mongo swift pod 正常工作,它需要 mongo-c-driver。我使用
我是 mongoc 的新手。我的mongo-c-driver是1.6.3,我想对mongodb数据库做一些操作,比如创建、更新、插入和删除。但是存在如下图所示的问题。我的eclipse CDT包含头文
根据 installation instructions ,运行时: brew tap mongodb/brew 我收到以下错误: Error: Invalid formula: /opt/homeb
我已经阅读了 MongoDB 文档并且有一个“$regex”运算符。我目前正在为使用 bsonsearch 的 C++ 编写的驱动程序执行 NodeJS 绑定(bind)。我在 NodeJS 中使用这
如何将此 Mongo Shell 脚本转换为 MongoDB C# 驱动程序? var myItems = [] var myCursor = db.Tickets.aggregate( [
==已安装:mongo-c-driver-1.1.0/usr/src/mongo-c-driver-1.1.0/src/mongoc issue : header file is in same di
我正在尝试使用 mongoc lib http://mongoc.org/ 在我的 mongodb 中添加一个 TTL 索引. 我正在做的是: keys = BCON_NEW("createdA
我是一名优秀的程序员,十分优秀!