我目前正在Java应用程序上使用MongoDB的驱动程序。假设我将以下两个文档存储在一个集合中:
文件A:
{
"_id": "something",
"key1": "Value1",
"Key2": "Value2",
"Key3": "Value3"
}
文件B:
{
"_id": "somethingDifferent",
"key1": "Value1",
"Key2": "Value2"
}
现在,我想通过使用key1和key2的值从集合中检索DocumentB的精确匹配,而不返回documenta,而不是_id,因为我事先不知道它。
如果我只是使用DocumentB作为查询(没有_id),Mongo也将返回DocumentA,因为它匹配所有的键和值,不考虑DocumentA有一个额外的键(key3)。
有没有办法在Mongo中执行这个“精确匹配”查询?之后我必须进行检查吗?
如果匹配的查询key: value
对的顺序与存储文档的顺序相同,则下面的聚合可以使用$eq运算符。
db.collection.aggregate([
{
$match: {
$expr: {
$eq: [
{
"key1": "Value1",
"Key2": "Value2"
},
{
$arrayToObject: {
$filter: {
input: {
$objectToArray: "$$ROOT"
},
cond: {
$ne: [
"$$this.k",
"_id"
]
}
}
}
}
]
}
}
}
])
蒙古游乐场
警告:这些对象是相等的
{ {
"key1": "Value1" ---- "key1": "Value1",
"Key2": "Value2", ---- "Key2": "Value2"
} }
这些对象并不相等
{ {
"key1": "Value1" --/- "Key2": "Value2",
"Key2": "Value2", -/-- "key1": "Value1"
} }
假设“完全匹配”是指文档除了查询中的字段之外没有其他字段。
您需要使用聚合框架来检索对象中的键列表,并筛选出具有意外键的键。在mongodb语法中,可以如下所示:
db.collection.aggregate([
{
$match: {
"key1": "Value1",
"Key2": "Value2"
}
},
{
$addFields: {
extra_keys: {
$setDifference: [
{
$map: {
input: {
$objectToArray: "$$ROOT"
},
in: "$$this.k"
}
},
[ // <== the list of keys in the query
"_id",
"key1",
"Key2"
]
]
}
}
},
{
$match: {
extra_keys: []
}
}
])
本文向大家介绍MongoDB精确数组匹配,包括了MongoDB精确数组匹配的使用技巧和注意事项,需要的朋友参考一下 对于精确的数组匹配,只需在MongoDB中使用。让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 这是对MongoDB数组匹配的查询- 这将产生以下输出-
我正在使用elasticsearch从json字段进行精确短语匹配。我尝试过多种语法,比如multi_match、query_string query_string我正在使用的语法; 我也尝试了过滤器而不是查询,但是过滤器在json上没有给出任何结果。我用于过滤器的语法是; 现在的问题是; 是否可以使用elasticsearch对json执行精确匹配操作?
问题内容: 我正在尝试编写一个NEST查询,该查询应基于完全匹配的字符串返回结果。我已经在网络上进行了研究,并且对使用术语,匹配,匹配短语有一些建议。我已经尝试了所有这些方法,但是搜索返回的结果中包含搜索字符串的一部分。例如,在我的数据库中,我有以下几行电子邮件地址: ter@gmail.com ter@hotmail.com terrance@hotmail.com 无论我是否使用: 要么
我正在尝试创建一个Lucene4.10索引。我只想在索引中保存我放入文档的确切字符串,witout标记化。 我在用StandardAnalyzer。 我试图搜索术语“燃料箱容量”@en(包括引号),所以我试图省略它们,并在术语周围添加了另外几个引号,以便让lucene理解我正在搜索整个文本。 如果我打印查询,我会得到:3:“燃料箱容量en”,但我不想拆分@符号上的文本。 我认为我的第一个问题是St
我试图检查字符串是否包含完全匹配。例如: String str="这是我的字符串,具有-Policy和-p" 我怎样才能做到以下几点:
我希望与字段中的字符串完全匹配,然后返回一天,提取所有此类记录。我所使用的json似乎也与简单的单词相匹配。我不确定我哪里出了问题。我需要向这个查询JSON添加吗?我目前拥有的JSON如下所示: