当前位置: 首页 > 知识库问答 >
问题:

Mongoose在findOneAndUpdate()上返回NULL

汤承德
2023-03-14

为了学习平均堆栈(使用Mongoose),我创建了一个StackOverflow类型的应用程序。我有存储在Mongo(v3.0.7)中的问题,它们有答案子文档。

我试图增加一个答案的投票数,但当问题返回时,它是空的。我非常肯定查询有问题,特别是我试图用需要修改的ID得到答案的地方。

var questionsSchema = new mongoose.Schema({
  answers: [ answerSchema ],
  });
var answerSchema = new mongoose.Schema({
  votes: { type: Number, default: 0 },
  });
Question.findOneAndUpdate(
  {_id: req.params.questionId, 'answers._id': req.params.answerId },
  { $inc: { 'answers.$.votes': 1 } },
  { new: true },
  function(err, question){
    if (err) { return next(err); }
    //question is returned as NULL
    res.json(question);
  });

查询0票有效:

Question.findOneAndUpdate(
  {_id: req.params.questionId, 'answers.votes': 0 },
  { $inc: { 'answers.$.votes': 1 } },
  { new: true },
  function(err, question){
    if (err) { return next(err); }
    //question is returned as NULL
    res.json(question);
  });

更新:通过Mongo查询,返回结果:

db.questions.find({_id: ObjectId('562e635b9f4d61ec1e0ed953'), 'answers._id': ObjectId('562e63719f4d61ec1e0ed954') })

但是,通过Mongoose返回NULL:

 Question.find(
{_id: Schema.ObjectId('562e635b9f4d61ec1e0ed953'), 'answers._id': Schema.ObjectId('562e63719f4d61ec1e0ed954') },

共有1个答案

易刚捷
2023-03-14

尝试使用mongoose类型ObjectID

http://mongoosejs.com/docs/api.html#types-objectid-js:

var ObjectId = mongoose.Types.ObjectId;
Question.find({
    _id: '562e635b9f4d61ec1e0ed953',
   'answers._id': new ObjectId('562e63719f4d61ec1e0ed954')
})

原始更新问题的最终答案:

Question.findOneAndUpdate(
   {_id: req.params.questionId, 
    'answers._id': new ObjectId(req.params.answerId) },
   { $inc: { 'answers.$.votes': 1 } },
   { new: true },
   function(err, question){
     if (err) { return next(err); }
     res.json(question);
   });
 类似资料:
  • 环境 期望的行为 我想更新文档并返回原始文档。 实际行为 正在返回更新的文档,而不是原始文档。 我试过的 起初,我在查看findAndModify: http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findAndModify 然而,那里的文档表示它已被弃用,并使用findOneAndUpdate、findOn

  • 问题内容: 在Node.js中使用Mongoose,您可以使用find返回一些字段。例如。 但我似乎无法弄清楚如何使用findOneAndUpdate返回某些字段。 有人做到过吗?我在文档中找不到它。 问题答案: 从说明书,该参数需要一个关键的它,因为还有其他的细节,比如和地方适用。您 还 需要以下选项: 您也可以使用 请注意,没有返回的文档处于处理更新修改 之前 的状态。有时候这就是您的意思,但

  • 我一直在研究猫鼬文档,但我找不到一种方法来实现我想要做的事情。考虑一个MangGDB用户集合。还可以考虑一个包含DB集合中所有字段的蒙古人用户模式。 现在,我想登录到控制台,所有用户,但属性已更改。有点像: 用户。图例(): 给定的异步类型。find()函数我不确定这是否可以实现。我来自C#和PHP背景,只处理关系数据库,这可以通过在用户类中使用只返回所需值的函数轻松实现。 能做到吗?!

  • 我正在学习nodejs和mongodb,并获得平均应用程序 我的系统规格是 Ubuntu 16.04(64位) 节点v 6.1.0 npm v 3.8.6 "mongodb":"^2.1.18", "猫鼬":"^4.4.16"," 到目前为止,我已经创建了模式,并通过终端使用在mongob集合中添加了一个条目,并使用获得生成的文档_id。 db。位置。查找()。终端中的pretty()返回低于输出

  • 摘要 在Mongoose中有一个post findOneAndUpdate钩子,在这个钩子里面我需要查询数据库。我正试图在另一个模型上执行。find(),但是每次我都得到以下错误: 误差

  • 运行查询后,我从MongoDB返回一个JSON值。问题是我不想返回与我的返回相关的所有JSON,我尝试搜索文档,但没有找到正确的方法。我想知道如果可能的话会怎样,如果可能的话,正确的做法是什么。示例:在数据库中 如果某个字段为用户存在,但不返回另一个字段,那么返回该字段的正确方式是什么。对于上面的示例,我想返回RMS的字段和扎克伯格的字段。这就是我试图找到的字段是否为空,但它似乎不起作用。