- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下带有记录的 mongo 集合,如下面的 json 示例记录所示,表示 一 记录。例如,我的目标是搜索单词“CONST”并找到“FullName”字段 的记录。在“别名”子树内 包含这个词。以显示的记录为例,它应该命中,因为“别名”树中的叶子 533-1 和 533-2 在它们各自的“全名”字段中包含字符串“CONST”。例如,如果别名树仅包含树内的 533-3 叶,则不会命中。
我使用 C# 和 MongoDb.Driver 包并使用 Regex 搜索普通字段 - 例如对于此集合中的“Key”,我使用“Builders.Filter.And(filter, Builders.Filter.Regex("Key", new BsonRegularExpression("")))”模式来添加条件。但是对于“别名”子树中的这些字段,我不知道如何添加条件。在此字段上进行搜索的最简单方法是什么?
请注意,在“别名”下,每片叶子都有不同的名称(533-1、533-2 等)。每个叶子的每个名称在整个集合的每个记录中都是唯一的。
记录示例:
{
"_id" : "128c5c57-ae95-4a08-9fb8-d6eade663908",
"_t" : "Company",
"ActiveFrom" : "20190813154343",
"ActiveTo" : "30001001000001",
"GroupId" : "38547478-88ef-4caf-a6ce-1a9e6a85a59b",
"Key" : "533",
"FullName" : "RED BRIGADES",
"Countries" : [
"ITALY"
],
"MoreInfo" : null,
"RecordDetail" : "<RecordDetail></RecordDetail>",
"Aliases" : {
"533-1" : {
"Key" : "533-1",
"FullName" : "BRIGADAS ROJAS PARA LA CONSTRUCCIÓN DEL PARTIDO COMUNISTA COMBATIENTE",
"OriginalKey" : "533"
},
"533-2" : {
"Key" : "533-2",
"FullName" : "BRIGADES ROUGES POUR LA CONSTRUCTION DU PARTI COMMUNISTE COMBATTANT",
"OriginalKey" : "533"
},
"533-3" : {
"Key" : "533-3",
"FullName" : "BRIGATE ROSSE",
"OriginalKey" : "533"
},
"533-4" : {
"Key" : "533-4",
"FullName" : "BRIGATE ROSSE PER LA COSTRUZIONE DEL PARTITO COMUNISTA COMBATTENTE",
"OriginalKey" : "533"
}
}
最佳答案
这可能比 Ryan's 运行得慢查询,但这是可读的,你可以理解它并优化它。
db.Companies.aggregate([
// Add temporary field deconstructed_aliases to every document of collection
{
$addFields: {
deconstructed_aliases: {
$objectToArray: "$Aliases"
}
}
},
// Unwind this newly created temporary field deconstructed_aliases
{
$unwind: "$deconstructed_aliases"
},
// Match on fullName now
{
$match: {
"deconstructed_aliases.v.FullName": {
$regex: new RegExp('CONST', 'i')
}
}
},
// Project needed fields
{
$project: {
_id: 0,
key: "$deconstructed_aliases.v.Key",
fullName: "$deconstructed_aliases.v.FullName"
}
}
]);
using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Testing
{
class Program
{
static void Main(string[] args)
{
MongoClient client = new MongoClient("mongodb://localhost:27017/test");
IMongoDatabase database = client.GetDatabase("test");
IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("Companies");
string searchTerm = "CONST";
string searchResult = FetchKeysBySearchTerm(collection, searchTerm).Result.ToJson();
Console.WriteLine(searchResult);
}
public async static Task<List<BsonDocument>> FetchKeysBySearchTerm(IMongoCollection<BsonDocument> collection, string searchTerm)
{
string addFieldStage = @"{ $addFields: { deconstructed_aliases: { $objectToArray: ""$Aliases"" } } }";
string unwindStage = @"{ $unwind: ""$deconstructed_aliases"" }";
string projectStage = @"{ $project: { _id: 0, key: ""$deconstructed_aliases.v.Key"", fullName: ""$deconstructed_aliases.v.FullName"" } }";
var aggregate = collection.Aggregate()
.AppendStage<BsonDocument>(addFieldStage)
.AppendStage<BsonDocument>(unwindStage)
.Match(Builders<BsonDocument>.Filter.Regex("deconstructed_aliases.v.FullName", new BsonRegularExpression(searchTerm, "i")))
.AppendStage<BsonDocument>(projectStage);
List<BsonDocument> searchResults = await aggregate.ToListAsync();
return searchResults;
}
}
}
[{ "key" : "533-1", "fullName" : "BRIGADAS ROJAS PARA LA CONSTRUCCIÓN DEL PARTIDO COMUNISTA COMBATIENTE" }, { "key" : "533-2", "fullName" : "BRIGADES ROUGES POUR LA CONSTRUCTION DU PARTI COMMUNISTE COMBATTANT" }]
关于c# - 使用正则表达式在 mongo 集合中搜索叶子内的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60302042/
Infix[]仅适用于第一级: Infix[(c a^b)^d] (* -> (a^b c) ~Power~ d *) 由于我想(不要问为什么)将完整表达式切换为中缀表示法,因此我尝试了以下操作: S
我正在寻找遍历特定元素的叶子的最有效方法。例如: One Two Paragraph Text
我想评估 bool 表达式,例如 a=b & s、>=、{ eval() {} // bool operator()(const var& v) const {
我正在尝试将物联网边缘设备设置为边缘网关。我们不希望我们的叶子/传感器/下游设备直接连接到互联网/云,因此我希望物联网边缘网关(顾名思义)能够桥接下游设备和云/物联网之间的连接中心。但是,我意识到任何
我是一名优秀的程序员,十分优秀!