Javascript 替换数组字段值
考虑以下mongo数据:Javascript 替换数组字段值,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,考虑以下mongo数据: { _id: "1", names: ["John", "Peter"] } 替换数组中简单元素的正确方法是什么,以获得以下结果 { _id: "1", names: ["John", "Sarah"] } 在我的代码中,我收到一个函数,将“Peter”与“Sarah”交换,如: 我不知道用Mongo操作员怎么做 我认为您必须按id检索文档,找到要替换的字符串的索引,并且仅在更新文档之后 下面的函数应该执行我上面描述的操作 async substituteI
{ _id: "1",
names: ["John", "Peter"]
}
替换数组中简单元素的正确方法是什么,以获得以下结果
{ _id: "1",
names: ["John", "Sarah"]
}
在我的代码中,我收到一个函数,将“Peter”与“Sarah”交换,如:
我不知道用Mongo操作员怎么做 我认为您必须按id检索文档,找到要替换的字符串的索引,并且仅在更新文档之后 下面的函数应该执行我上面描述的操作
async substituteItemOnArray = (_id, from, to) => {
const doc = await MyModel.findOne({ _id });
if (doc && doc.names && doc.names.indexOf(from) > -1) {
const index = dox.names.indexOf(from);
const keyToUpdate = `names.${index}`;
MyModel.update({ _id }, { $set: { [keyToUpdate] : to} },)
}
substituteItemOnArray("1", "Peter", "Sarah");
您可以在mongoose中使用mongoDB阵列过滤器执行此操作:
function substituteItemOnArray = (id, from, to) {
return MyModel.findOneAndUpdate(
{id: id}, // where to update
{$set: {'names.$[element]': to }}, // what to update
{arrayFilters: [{'element': from}]} // what should match in array.
)
}
(
async () => {
let doc = await substituteItemOnArray(id, "Peter", "Sarah");
console.log(doc);
}
)()
只需使用
$
位置运算符即可
db.getCollection('test').findOneAndUpdate(
{ names: "Peter" },
{ $set: { 'names.$': "Sarah" }}
)
names
是字符串数组吗?类似于名称:[“约翰”、“彼得”]
。我相信数据也是数组的类型!我将在代码中更正…可能的重复可能的重复无论“Sarah”在数组中的位置如何,这都能起作用吗<代码>[“约翰”、“莎拉”]、[“莎拉”、“约翰”]、[“约翰”、“莎拉”、“彼得”]等。是的,您可以查看
db.getCollection('test').findOneAndUpdate(
{ names: "Peter" },
{ $set: { 'names.$': "Sarah" }}
)