Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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
Javascript Mongoose findOneAndUpdate仅返回新的$push文档_Javascript_Node.js_Mongoose - Fatal编程技术网

Javascript Mongoose findOneAndUpdate仅返回新的$push文档

Javascript Mongoose findOneAndUpdate仅返回新的$push文档,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,以下是我的收藏“配置文件”的模式: 我想推送一个嵌入式阵列: { _id : new ObjectID(), rate : 60.0, raisedOn : "7/5/2012" } 并在执行后返回此文件 所以我通过猫鼬做了这个 var condition = { '_id': "2bb0fad110"}, insert = { '_id': new ObjectID(), 'rate': 60.0, 'raisedOn': "7/5/2012", },

以下是我的收藏“配置文件”的模式:

我想推送一个嵌入式阵列:

{
  _id : new ObjectID(), rate : 60.0, raisedOn : "7/5/2012"
}
并在执行后返回此文件

所以我通过猫鼬做了这个

var condition = { '_id': "2bb0fad110"},
  insert = {
    '_id': new ObjectID(),
    'rate': 60.0,
    'raisedOn': "7/5/2012",

  },

  options = { strict: false, new: true };



function callback (err, result) {
  if (err) { console.log(err); res.status(400).send("error"); }
  console.log('result:' + JSON.stringify(result));
  res.json(result);
}


dbmodel.findOneAndUpdate(condition, { $push: { defaultrates: insert } }, options, callback);
很好,返回值(即整个对象)是:

但我的目标是只返回值:

{_id : ObjectId("65009be546"), rate : 60.0, raisedOn : "7/5/2012"}
而不是整个文件

我该怎么做? 这一行我遗漏了什么:

dbmodel.findOneAndUpdate(condition, { $push: { defaultrates: insert } }, options, callback);

当您获得完整更新的对象时(由于
{new:true}
选项),您可以使用JavaScript找到嵌入文档数组中的最后一个元素,并将其作为响应发送

所以这个物体

{
  _id : ObjectId("2bb0fad110"), 
  name : "Tommy", 
  defaultrates : 
  [ 
      {_id : ObjectId("444cbcfd52"), rate : 35.0, raisedOn : "5/2/2009"}, 
      {_id : ObjectId("2e642b1510"), rate : 55.0, raisedOn : "5/3/2010"}, 
      {_id : ObjectId("47cc4d69d3"), rate : 65.0, raisedOn : "5/5/2010"},
      {_id : ObjectId("65009be546"), rate : 60.0, raisedOn : "7/5/2012"}
  ] 
}
你可以这样做

function callback (err, result) {
  if (err) { console.log(err); res.status(400).send("error"); }
  console.log('result:' + JSON.stringify(result));

  // BELOW ADDED
  const newDefaultRate = result.defaultrates[result.defaultrates.length - 1]; // gets the last element in the array
  res.status(201).json(newDefaultRate); // http status 201 to show new resource created
}

希望这将有助于遇到此线程的人。

使用
res.json(result)
返回整个文档。如果只需要新插入的对象,则应返回
insert
值。那么,我的语法应该是什么?
{
  _id : ObjectId("2bb0fad110"), 
  name : "Tommy", 
  defaultrates : 
  [ 
      {_id : ObjectId("444cbcfd52"), rate : 35.0, raisedOn : "5/2/2009"}, 
      {_id : ObjectId("2e642b1510"), rate : 55.0, raisedOn : "5/3/2010"}, 
      {_id : ObjectId("47cc4d69d3"), rate : 65.0, raisedOn : "5/5/2010"},
      {_id : ObjectId("65009be546"), rate : 60.0, raisedOn : "7/5/2012"}
  ] 
}
function callback (err, result) {
  if (err) { console.log(err); res.status(400).send("error"); }
  console.log('result:' + JSON.stringify(result));

  // BELOW ADDED
  const newDefaultRate = result.defaultrates[result.defaultrates.length - 1]; // gets the last element in the array
  res.status(201).json(newDefaultRate); // http status 201 to show new resource created
}