MongoDB Shell:是否可以使用函数执行更新查询?
我收集了如下数据:MongoDB Shell:是否可以使用函数执行更新查询?,mongodb,Mongodb,我收集了如下数据: [{ _id: 1, address: '1/23 Fake Street' }, { _id: 2, address: '5/20 Whatever Lane' }, { _id: 3, address: '10 Foo Avenue' }] const cursor = db.items.find({}); for await (const item of cursor) { try { aw
[{
_id: 1,
address: '1/23 Fake Street'
},
{
_id: 2,
address: '5/20 Whatever Lane'
},
{
_id: 3,
address: '10 Foo Avenue'
}]
const cursor = db.items.find({});
for await (const item of cursor) {
try {
await pageMapper(item);
} catch (e) {
console.error(e);
}
}
async function pageMapper(item){
const newAddress = item.address.toLowerCase()
const buildingAddress = newAddress.split('/ ')[1];
return db.items.updateOne(item._id, {
$set: {
address: newAddress,
buildingAddress
}
})
}
我想执行Mongo批量更新查询,它执行以下操作:
地址
字段转换为小写[{
_id: 1,
address: '1/23 Fake Street'
},
{
_id: 2,
address: '5/20 Whatever Lane'
},
{
_id: 3,
address: '10 Foo Avenue'
}]
const cursor = db.items.find({});
for await (const item of cursor) {
try {
await pageMapper(item);
} catch (e) {
console.error(e);
}
}
async function pageMapper(item){
const newAddress = item.address.toLowerCase()
const buildingAddress = newAddress.split('/ ')[1];
return db.items.updateOne(item._id, {
$set: {
address: newAddress,
buildingAddress
}
})
}
我想知道MongoDB shell本身是否有这样做的方法,将函数传递给
db.collection.update
?或者我应该坚持使用节点驱动程序来执行更复杂的更新操作吗?如果您使用的是MongoDB 4.2+,那么可以使用聚合或管道形式的更新来完成
将字符串转换为小写
分场
或选择要保留的元素
一种可能的更新方法:
db.items.updateMany({},[
{$addFields:{
address:{$toLower:"$address"}
}},
{$addFields:{
buildingAddress:{
$arrayElemAt:[
{$split:["$address","/"]},
-1
]
}
}}
])
如果您使用的是MongoDB 4.2+,那么可以使用聚合或管道形式的更新来实现这一点 将字符串转换为小写 分场 或选择要保留的元素 一种可能的更新方法:
db.items.updateMany({},[
{$addFields:{
address:{$toLower:"$address"}
}},
{$addFields:{
buildingAddress:{
$arrayElemAt:[
{$split:["$address","/"]},
-1
]
}
}}
])
你可以在MongoShell中运行js脚本你可以在MongoShell中运行js脚本这就是我要找的。$split方法中的小错误=>这需要gto映射到数组,比如:
{$split:[“$address”,“/”]},
很好。我完全错了。这就是我要找的。$split方法中的小错误=>这需要gto映射到数组,比如:{$split:[“$address”,“/”]},
很好。我完全错了。