更新嵌套数组对象(放置请求)

mar*_*cel 0 mongodb mongodb-query

我在一个名为pown的集合文档中有一个数组.

{
    _id: 123..,
    name: pupies,
    pups:[ {name: pup1, location: somewhere}, {name: pup2, ...}]
}
Run Code Online (Sandbox Code Playgroud)

现在,使用我的rest-service的用户将整个第一个条目作为put请求发送:

{name: pup1, location: inTown}
Run Code Online (Sandbox Code Playgroud)

之后我想在我的数据库中更新这个元素.

所以我试过这个:

var updatedPup = req.body;
var searchQuery = { 
    _id : 123...,
    pups : { name : req.body.name }
}
var updateQuery = {
    $set: {'pups': updatedPup }
}
db.pown.update(searchQuery, updateQuery, function(err, data){ ... }
Run Code Online (Sandbox Code Playgroud)

不幸的是,它没有更新anythig.有谁知道如何更新整个数组元素?

ma0*_*a08 5

正如Neil指出的那样,您需要熟悉点符号(用于选择字段)和位置运算符$(用于选择数组中的特定元素,即原始搜索查询中匹配的元素).如果要替换数组中的整个元素

var updateQuery= {
      "$set":{"pups.$": updatedPup}
    }
Run Code Online (Sandbox Code Playgroud)

如果您只需要更改位置,

var updateQuery= {
  "$set":{"pups.$.location": updatedPup.location}
}
Run Code Online (Sandbox Code Playgroud)