如何在mongodb中获取url的最后一部分?

如何在mongodb中获取url的最后一部分?,mongodb,Mongodb,我有一个数据库,其数据列格式为:。如何更新该格式的所有数据,使其仅包含url的最后一部分(在最后一个“/”之后) 例如: ->我想要的部分 我想做这样的事情: db.table.aggregate([ { $project : { $split: ["url", "/"] }, qty : 1 } } ]) db.table.update([ {$set : { "url" : "url [ url.length - 1 ] } } ]) 这是我第一次使用mongodb,所

我有一个数据库,其数据列格式为:。如何更新该格式的所有数据,使其仅包含url的最后一部分(在最后一个“/”之后)

例如: ->我想要的部分

我想做这样的事情:

db.table.aggregate([
    { $project : { $split: ["url", "/"] }, qty : 1 } }
])

db.table.update([ 
    {$set : { "url" : "url [ url.length - 1 ] } }
])
这是我第一次使用mongodb,所以我不知道语法是否接近正确。任何帮助都将不胜感激


谢谢

您可以执行以下操作以获得所需零件的列表,并对它们执行任何操作,这里我已按照您的建议将它们插入另一个表中

db.table.aggregate([
  { $project : { item : { $split: ["$item", "/"] }, _id : 0 } }
]).map(obj => obj.item[obj.item.length - 1])
.forEach(result => db.table2.insert({wanted: result})
然后,

返回

{"wanted": "part_i_want"}
{"wanted": "part_i_want2"}
用于数据

db.table.insert([
  { item: "http://www.website.com/stuff/more_stuff/part_i_want"},
  { item: "http://www.website.com/stuff/more_stuff/part_i_want2"}
]);
在在线控制台上测试


您还可以在MongoDB游标上阅读更多关于这些JavaScript的信息

您可以执行以下操作以获取所需部件的列表,并对它们执行任何操作,这里我按照您的建议将它们插入另一个表中

db.table.aggregate([
  { $project : { item : { $split: ["$item", "/"] }, _id : 0 } }
]).map(obj => obj.item[obj.item.length - 1])
.forEach(result => db.table2.insert({wanted: result})
然后,

返回

{"wanted": "part_i_want"}
{"wanted": "part_i_want2"}
用于数据

db.table.insert([
  { item: "http://www.website.com/stuff/more_stuff/part_i_want"},
  { item: "http://www.website.com/stuff/more_stuff/part_i_want2"}
]);
在在线控制台上测试


此外,您还可以在MongoDB游标上阅读有关这些JavaScript的更多信息

您可以使用单个阶段执行聚合,以生成由
/
分隔的数组,并使用以下内容获取最后一个元素:

聚合可以将结果输出到一个临时集合,并后跟一个,以将临时集合中的所有字段更新到初始集合中:

var bulk = db.table.initializeUnorderedBulkOp()

query = [{
    $project: {
        url: {
            $arrayElemAt: [{ $split: ["$url", "/"] }, -1]
        }
    },
}, {
    $out: "tempo"
}];

db.table.aggregate(query);

var bulkOps = db.tempo.find().map(function(doc) {
    return {
        "updateOne": {
            "filter": { "_id": doc._id },
            "update": { "$set": { "url": doc.url } }
        }
    };
});

db.table.bulkWrite(bulkOps);

您可以使用单个阶段执行聚合,以生成由
/
分隔的数组,并使用以下内容获取最后一个元素:

聚合可以将结果输出到一个临时集合,并后跟一个,以将临时集合中的所有字段更新到初始集合中:

var bulk = db.table.initializeUnorderedBulkOp()

query = [{
    $project: {
        url: {
            $arrayElemAt: [{ $split: ["$url", "/"] }, -1]
        }
    },
}, {
    $out: "tempo"
}];

db.table.aggregate(query);

var bulkOps = db.tempo.find().map(function(doc) {
    return {
        "updateOne": {
            "filter": { "_id": doc._id },
            "update": { "$set": { "url": doc.url } }
        }
    };
});

db.table.bulkWrite(bulkOps);