首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除字符串Mongodb的子集短语

如何删除字符串Mongodb的子集短语
EN

Stack Overflow用户
提问于 2020-01-01 17:57:38
回答 3查看 192关注 0票数 1

我需要一些帮助来创建monogdb查询,从包含短语'?=view‘的特定URL中删除结尾。例如,三个URL是:

代码语言:javascript
复制
https://stackoverflow.com/questions/ask
https://stackoverflow.com/questions/ask100?=view
https://stackoverflow.com/questions/ask101

输出将为:

代码语言:javascript
复制
https://stackoverflow.com/questions/ask
https://stackoverflow.com/questions/ask100
https://stackoverflow.com/questions/ask101

采集示例:

代码语言:javascript
复制
Product{
id: ...
URL: 'https://stackoverflow.com/questions/ask'}

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-01 18:25:44

下面的aggregation with update查询从每个字符串的末尾去掉"?=view“。正则表达式/.+\?=view$/查找以子字符串"?=view“结尾的字符串。

代码语言:javascript
复制
db.test.aggregate( [
  {
       $match: { url: { $regex: /.+\?=view$/ } }
  },
  { 
      $addFields: { 
          url: { $split: [ "$url", "?" ] } 
      } 
  }
] ).forEach( doc => db.test.updateOne( { _id: doc._id }, { $set: { url: doc.url[0] } } )
票数 0
EN

Stack Overflow用户

发布于 2020-01-01 19:06:54

另一种解决方案是在$split之后使用$arrayElemAt来获取不带查询字符串的URL。

代码语言:javascript
复制
db.Product.aggregate([
  {
    $project: {
      id: 1,
      URL: {
        $arrayElemAt: [
          {
            "$split": [
              "$URL",
              "?"
            ]
          },
          0
        ]
      }
    }
  }
])

MongoPlayground

票数 0
EN

Stack Overflow用户

发布于 2020-01-01 20:06:28

您可以简单地使用正则表达式"/?=view"聚合以查找所有匹配的记录,然后循环逐个更新它,如下所示:

代码语言:javascript
复制
> db.product.find()
{ "_id" : ObjectId("5e0c86a4a2e621133ea3b041"), "url" : "https://stackoverflow.com/questions/ask" }
{ "_id" : ObjectId("5e0c86b1a2e621133ea3b042"), "url" : "https://stackoverflow.com/questions/ask100?=view" }
{ "_id" : ObjectId("5e0c86c1a2e621133ea3b043"), "url" : "https://stackoverflow.com/questions/ask101" }
> 
> 
> db.product.aggregate( [   
{   $match: {            url: { $regex: "/?=view" } } }, 
{ $addFields: { url: { $split: [ "$url", "?" ] } } }
]).forEach(function(matchedDoc) {printjson(matchedDoc); 
    db.product.updateOne({_id: matchedDoc._id}, {$set: {url: matchedDoc.url[0]}  } )} 
)
{
    "_id" : ObjectId("5e0c86b1a2e621133ea3b042"),
    "url" : [
        "https://stackoverflow.com/questions/ask100",
        "=view"
    ]
}
> db.product.find()
{ "_id" : ObjectId("5e0c86a4a2e621133ea3b041"), "url" : "https://stackoverflow.com/questions/ask" }
{ "_id" : ObjectId("5e0c86b1a2e621133ea3b042"), "url" : "https://stackoverflow.com/questions/ask100" }
{ "_id" : ObjectId("5e0c86c1a2e621133ea3b043"), "url" : "https://stackoverflow.com/questions/ask101" }
>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59551494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档