如何通过ID与mongoose一起选择mongo子文档?

里顿

我正在读一本书,代码不起作用。谷歌和这里的一切都表明该代码是正确的!没用

Loc
      .findById(req.params.locationid)
      .select('name reviews')
      .exec(
        function(err, location) {
          if (location.reviews && location.reviews.length > 0) {
            // this is the problem:
            review = location.reviews.id(req.params.reviewid); 
            if (!review) {
              sendJSONresponse(res, 404, {
                "message": "reviewid not found"
              });
            } else {
              response = {
                location: {
                  name: location.name,
                  id: req.params.locationid
                },
                review: review
              };
              sendJSONresponse(res, 200, response);
            }
          }
        }
    );

id不是函数,所以id()没有返回。

我尝试对ID号进行硬编码,使我在网上发现了很多东西,但是最重要的是,这location.reviews.id只是一个值。我还做了Loc.findById(req.params.locationid).reviews ...wherefindById,没事!我也花了很多时间在尝试,_id以及与此相关的许多事情

我可以浏览评论并在reviews.id匹配的情况下停止,但是我想知道作者正在尝试做什么。

据我了解,这location是一个javascript对象,自然无法使用id函数

这是架构

var reviewSchema = new mongoose.Schema({
  author: String,
  rating: {type: Number, required: true, min: 0, max: 5},
  reviewText: String,
  createdOn: {type: Date, "default": Date.now}
});

var locationSchema = new mongoose.Schema({ 
    name: {type: String, required: true},
  address: String,
  rating: {type: Number, "default": 0, min: 0, max: 5},
  facilities: [String],
  coords: {type: [Number], index: '2dsphere'},
  openingTimes: [openingTimeSchema], //nesting a schema
  reviews: [reviewSchema]
});

整个模块代码是(我会共享它,以防万一我没有选择正确的块):

module.exports.reviewsReadOne = function(req, res) {
  console.log("Getting single review");
  if (req.params && req.params.locationid && req.params.reviewid) {
    Loc
      .findById(req.params.locationid)
      .select('name reviews')
      .exec(
        function(err, location) {
          if (location.reviews && location.reviews.length > 0) {
            review = location.reviews.id(req.params.reviewid);
            if (!review) {
              sendJSONresponse(res, 404, {
                "message": "reviewid not found"
              });
            } else {
              response = {
                location: {
                  name: location.name,
                  id: req.params.locationid
                },
                review: review
              };
              sendJSONresponse(res, 200, response);
            }
          }
        }
    );
  } else {
    sendJSONresponse(res, 404, {
      "message": "Not found, locationid and reviewid are both required"
    });
  }
};

比你有帮助吗?

zangw

根据我们的讨论,我们找到了根本原因

db.locations.update({ name: 'Starcups' }, 
                    { $push: { 
                         reviews: { 
                            author: 'Simon Holmes', 
                            id: ObjectId(), // issue is here
                            rating: 5, ... } } })

id: ObjectId()将创建id子文档,并没有实地_id领域reviews子文档。

id()方法用于documentArrays有一个特殊的id方法通过它的文档查找_id由于文档数组中没有_id字段reviews,因此无法正常工作。

id: ObjectId()从您的代码中删除

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过ID与mongoose选择mongo子文档?

来自分类Dev

如何使用Mongoose通过id-s获取所有文档,这些文档存储在另一个架构的子文档中?

来自分类Dev

如何在NodeJ中将Mongo Bulk与多文档交易一起使用?

来自分类Dev

Mongoose 如何通过 id 数组查找并拉出其特定的子文档?

来自分类Dev

knitr:如何将子.Rnw文档与(相对)图形路径一起使用?

来自分类Dev

通过ID查找文档并在Mongoose中过滤子数组

来自分类Dev

通过ID与第三张桌子一起选择

来自分类Dev

如何将jquery子选择器(>)与变量一起使用?

来自分类Dev

如何通过Criteria + Mongoose / MongoDB查找子文档

来自分类Dev

使用mongoose从Mongo中删除子文档

来自分类Dev

如何在Node Mongo DB mongoose Express App中同时创建文档和子文档

来自分类Dev

如何将nth-child选择器与jquery的子选择器一起使用?

来自分类Dev

递归CTE如何与文档中的示例一起使用?

来自分类Dev

如何使用Bluebird处理与Mongoose一起返还的诺言?

来自分类Dev

通过_id与猫鼬一起找到

来自分类Dev

通过_id与猫鼬一起找到

来自分类Dev

如何通过使用Mongoose查询子文档来查找父文档?

来自分类Dev

如何使用Mongoose获取具有多个非独占选择器的mongo文档?

来自分类Dev

如何使用Mongoose进行查询,该查询获得N个结果,但将其找到的符合特定条件的任何文档组合在一起?

来自分类Dev

如何通过唯一ID将R列中的某些行加在一起?

来自分类Dev

如何与选择一起使用引导程序弹出窗口?

来自分类Dev

NGRX Select:选择如何与内部对象一起使用?

来自分类Dev

“ set -e”如何与子外壳一起使用?

来自分类Dev

如何使Maven与Python子进程一起使用?

来自分类Dev

如何使过滤器与子查询一起使用?

来自分类Dev

如何通过使用子元素的ID选择父对象的第一个孩子?

来自分类Dev

一起获取Firestore收集和子收集文档数据

来自分类Dev

jQuery.on与父子选择器一起使用vs仅子选择器

来自分类Dev

mongo:通过id更新文档

Related 相关文章

  1. 1

    如何通过ID与mongoose选择mongo子文档?

  2. 2

    如何使用Mongoose通过id-s获取所有文档,这些文档存储在另一个架构的子文档中?

  3. 3

    如何在NodeJ中将Mongo Bulk与多文档交易一起使用?

  4. 4

    Mongoose 如何通过 id 数组查找并拉出其特定的子文档?

  5. 5

    knitr:如何将子.Rnw文档与(相对)图形路径一起使用?

  6. 6

    通过ID查找文档并在Mongoose中过滤子数组

  7. 7

    通过ID与第三张桌子一起选择

  8. 8

    如何将jquery子选择器(>)与变量一起使用?

  9. 9

    如何通过Criteria + Mongoose / MongoDB查找子文档

  10. 10

    使用mongoose从Mongo中删除子文档

  11. 11

    如何在Node Mongo DB mongoose Express App中同时创建文档和子文档

  12. 12

    如何将nth-child选择器与jquery的子选择器一起使用?

  13. 13

    递归CTE如何与文档中的示例一起使用?

  14. 14

    如何使用Bluebird处理与Mongoose一起返还的诺言?

  15. 15

    通过_id与猫鼬一起找到

  16. 16

    通过_id与猫鼬一起找到

  17. 17

    如何通过使用Mongoose查询子文档来查找父文档?

  18. 18

    如何使用Mongoose获取具有多个非独占选择器的mongo文档?

  19. 19

    如何使用Mongoose进行查询,该查询获得N个结果,但将其找到的符合特定条件的任何文档组合在一起?

  20. 20

    如何通过唯一ID将R列中的某些行加在一起?

  21. 21

    如何与选择一起使用引导程序弹出窗口?

  22. 22

    NGRX Select:选择如何与内部对象一起使用?

  23. 23

    “ set -e”如何与子外壳一起使用?

  24. 24

    如何使Maven与Python子进程一起使用?

  25. 25

    如何使过滤器与子查询一起使用?

  26. 26

    如何通过使用子元素的ID选择父对象的第一个孩子?

  27. 27

    一起获取Firestore收集和子收集文档数据

  28. 28

    jQuery.on与父子选择器一起使用vs仅子选择器

  29. 29

    mongo:通过id更新文档

热门标签

归档