Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Arrays 推送或添加到mongoose中的集合_Arrays_Insert_Mongoose - Fatal编程技术网

Arrays 推送或添加到mongoose中的集合

Arrays 推送或添加到mongoose中的集合,arrays,insert,mongoose,Arrays,Insert,Mongoose,我有很多东西要留给猫鼬。它们是很深的物体 var obj1 = { first_name : 'adam', last_name: 'smith', car : [{ make: 'honda', model: 'civic', colors: [{ name: 'red', code: 'ff0000' }] }] } 进入如下匹配模型: var Owner = new Schema({ first_name:

我有很多东西要留给猫鼬。它们是很深的物体

var obj1 = {
  first_name : 'adam',
  last_name: 'smith',
  car : [{
    make: 'honda',
    model: 'civic',
    colors: [{
      name: 'red',
      code: 'ff0000'
    }]
  }]
}
进入如下匹配模型:

var Owner = new Schema({
    first_name: String, 
    last_name: String,
    cars:[{
        make: String,
        model: String
        colors: [{
          name: String,
          code: String
        }]
    }]
});
这一切都很好,很漂亮,除非亚当有第二张唱片:

var obj2 = {
  first_name : 'adam',
  last_name: 'smith',
  car : [{
    make: 'ford',
    model: 'focus',
      colors: [{
        name: 'blue',
        code: '0000ff'
      }]
  }]
}
var obj3 = {
  first_name : 'adam',
  last_name: 'smith',
  car : [{
    make: 'honda',
    model: 'civic',
      colors: [{
        name: 'blue',
        code: '0000ff'
      }]
  }]
}
当我执行以下操作时,每个都会完全覆盖上一个:

Owner.findOneAndUpdate({first_name:"adam", last_name: "smith"}, obj2, {upsert: true});
我如何让mongoose在没有记录时创建新记录,但在有记录时追加到
car
数组?如果汽车已经存在,是否附加到颜色数组


为了让事情变得有趣一点,在我的例子中,数据的结构并不一致。它适用于给定的集合,但我的每个集合都是动态设置的,因此模型可能有很多层,并且具有任何给定的键

这种方法允许您将新元素推送到数组字段上

db.findOneAndUpdate( 

    {first_name:"adam", last_name: "smith"},
    {   $push: { cars : {
                        make: 'ford',
                        model: 'focus'
                    }
                }
    },

    {   safe: true, 
        upsert: false, 
        new : true
    }
);

我感觉到你在尝试猜测任意复杂的插入/更新/删除的语法时的痛苦。。。mongo/mongoose的世界迫切需要一种工具来读取模式/数据,并让您以交互方式描述您的细节,以合成上述代码片段

尝试使用upsert true和false,但仍然没有保存记录。我将编辑一点问题。即使在显式创建第一级记录后调用此函数,我也不会得到任何更深层次的存储。我可能不得不回到这个问题上。