考虑以下mongo数据:
{ _id: "1",
names: ["John", "Peter"]
}
替换数组中的简单元素,得到以下结果的正确方法是什么?
{ _id: "1",
names: ["John", "Sarah"]
}
在我的代码中,我收到了一个将“ Peter”与“ Sarah”交换的函数,例如:
substituteItemOnArray = (id, from, to) => {
MyModel.update({
id: id
},
{
??? What is the correct way to substitute one element with another ???
});
}
substituteItemOnArray("1", "Peter", "Sarah");
答案 0 :(得分:1)
我不知道仅靠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");
答案 1 :(得分:1)
只需使用$
位置运算符
db.getCollection('test').findOneAndUpdate(
{ names: "Peter" },
{ $set: { 'names.$': "Sarah" }}
)
答案 2 :(得分:0)
您可以使用mongoose中的mongoDB arrayFilters做到这一点:
result = [x for x in rhg_brands if x in brands_in_df]
assert result==['Radisson Collection', 'Park Plaza', 'Radisson Red', 'Radisson' ]