Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用NodeJS、MongoDB&;更新数组项;和尚_Node.js_Mongodb_Mongoskin - Fatal编程技术网

Node.js 使用NodeJS、MongoDB&;更新数组项;和尚

Node.js 使用NodeJS、MongoDB&;更新数组项;和尚,node.js,mongodb,mongoskin,Node.js,Mongodb,Mongoskin,我有这样一个数据集: { name : 'Doc Name', photos: [ { name: 'photo1', url: 'http://.....' }, { name: 'photo2', url: 'http://......' } ], etc ... 使用Monk如何更新photo2?我可以在遍历字段时使用索引 下面我当前的尝试给了我一个错误,

我有这样一个数据集:

{ 
  name : 'Doc Name',
  photos: [
      {
        name: 'photo1',
        url: 'http://.....'
      },
      {
        name: 'photo2',
        url: 'http://......'
      }
   ],
   etc ...
使用Monk如何更新photo2?我可以在遍历字段时使用索引

下面我当前的尝试给了我一个错误,我不能为JSON选择器使用变量(如索引中)


可以使用“位置”操作符更新数组中某个位置的项


所以我找到了解决我问题的办法,但可能有更好的选择,我将不回答。但对于其他有同样问题的人,我就是这么做的:

我将MongoDB文档提取为Node.js中的一个对象,处理该文档,然后在一条update语句中替换整个数组。例如,下面是一些伪代码:

collection.find({id: 1}, function(err, doc){
    for(i=0; i< doc.array.length; i++) {
          //do what you gotta do
          doc.array[i].property = 'new value';
    }
    collection.update({id: 1}, {$set : {"doc.array": doc.array}}, function(err,doc){
          console.log(err);
    }
})
collection.find({id:1},函数(err,doc){
对于(i=0;i
值得注意的是,这仅在找到一(1)个子文档时有效。如果要更新多个子文档,请投票支持该错误。@jnovack从技术上讲,这是一个“功能请求”当然,对于这个特定的请求,有一个不同的问题,关于这个链接,我给出了我的答案,关于你如何使用新的MongoDB特性来实现这一点。
collection.update( 
    { _id: data.id, "photos.name": "photo2" }, 
    { $set: { "photos.$.data": "yourdata" } }
)
collection.find({id: 1}, function(err, doc){
    for(i=0; i< doc.array.length; i++) {
          //do what you gotta do
          doc.array[i].property = 'new value';
    }
    collection.update({id: 1}, {$set : {"doc.array": doc.array}}, function(err,doc){
          console.log(err);
    }
})