替换数组字段值

时间:2019-02-21 13:14:37

标签: javascript mongodb mongoose

考虑以下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");

3 个答案:

答案 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' ]