gpt4 book ai didi

MongoDB - 如何查询没有任何空格的字符串(省略带空格的字符串)的长度

转载 作者:行者123 更新时间:2023-12-04 10:24:04 25 4
gpt4 key购买 nike

我已将长度匹配的文档查询为:

文件格式示例:

{
"_id": {
"$oid": "5e158e2de6facf7181cc368f"
},
"word": "as luck would have it",
}

查询为:
{$where: "this.word.length == 20 "}

这匹配以下内容:
{
"_id": {
"$oid": "5e158e30e6facf7181cc3bdb"
},
"word": "adrenocorticotrophic",
}

{
"_id": {
"$oid": "5e158e2ee6facf7181cc38cf"
},
"word": "attributive genitive",
}

但我只想匹配 adrenocorticotrophic不是像 attributive genitive 这样带空格的词

我可以知道我怎么能像上面那样匹配吗?

任何帮助表示赞赏!

最佳答案

更新:

我找到了另一种方法(可能很简单)来做到这一点,它应该适用于版本 >= 3.4 , 尝试这个 :

/** When you split a string on a delimiter(space in your requirement) it would split string into an array of elements, 
* if no space in string then it would be only one element in array, then get a size & get docs having size less than 2 */

db.collection.aggregate([
{
$match: {
$expr: {
$lt: [
{
$size: {
$split: [
"$word", // word should not be null or '' (can be empty ' ')
" "
]
}
},
2
]
}
}
}
])

测试: MongoDB-Playground

旧:

在 MongoDB 版本上 >= 4.2 , 您可以使用 $regexMatch 来做到这一点:
db.collection.aggregate([
/** A new field gets added to be true if word has spaces else be false */
{
$addFields: {
wordHasSpaces: {
$regexMatch: {
input: "$word",
regex: /\w+\s\w+/ /** This regex exp works if your string has plain characters A-Z */
}
}
}
},
/** Remove docs where word has spaces */
{ $match: { wordHasSpaces: false } },
/** Remove newly added unnecessary field */
{ $project: { wordHasSpaces: 0 } }
]);

同样对于您现有的代码,您可以停止使用 $where这通常用于在查询中执行 .js 代码 & 性能较低,因此在 MongoDB v >= 3.4 上您可以使用 $strLenCP :
db.collection.aggregate([{$match : {$expr: {$eq : [{ $strLenCP:'$word'}, 20]}}}]) /** $expr is kind of replacement to $where */

测试: MongoDB-Playground

关于MongoDB - 如何查询没有任何空格的字符串(省略带空格的字符串)的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60705034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com