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