node js从mongodb obejct内部值

时间:2016-09-21 09:10:29

标签: javascript node.js mongodb syntax mongoose

我有一个从mongodb检索到的商店对象, 我有兴趣使用值store.comments。

我记录了商店价值,它是:

store:{ _id: 57e246f73e63d635cce3d174,
  __v: 0,
  comments: 57e246f73e63d635cce3d177,
  loc: [ 105.832321, 105.233272 ],
  name: '24 store',
  reportedFalse: [],
  products: [],
  currentRanking: 
   { likes: 57e246f73e63d635cce3d175,
     dislikes: 57e246f73e63d635cce3d176 },
  timePosted: Wed Sep 21 2016 11:38:15 GMT+0300 (Jerusalem Summer Time) },

然后我记录了对象评论值的值 - result.comments

store comments objectid: undefined

似乎当我尝试稍后通过评论值搜索它没有成功搜索它时。因为搜索返回null,虽然我看到在我的数据库中我在“comments”表/模式中有相应的对象具有相同的id ....

Comments.findById(commentsId,function(commentsErr,commentsArrObj){
...
cb(null, commentsArrObj._id);
                    }

我得到:

TypeError: Cannot read property '_id' of null

以下是我的架构的一部分供参考:

        name: String,
        comments: mongoose.Schema.Types.ObjectId, // each comment has a object id - responder, link curl? crud?  to his profile, profile pic, date time.
        timePosted : { type: Date, default: Date.now },
        currentRanking: {
            likes: mongoose.Schema.Types.ObjectId, // a votes document
            dislikes: mongoose.Schema.Types.ObjectId // a votes document
        },

2 个答案:

答案 0 :(得分:1)

在您的架构中,您必须使用' ref'

comments: mongoose.Schema.Types.ObjectId,ref:'comments'(modal name of comments)

引用注释架构并使用填充注释来获取注释数据。

答案 1 :(得分:0)

控制错误对象" commentsErr"然后检查它是什么打印。如果您的commentsId类型更改为字符串,则可能是不从架构中查找注释的可能原因。尝试将其转换为ObjectId。

使用:

Comments.findById(new mongoose.Types.ObjectId(id),function(commentsErr,commentsArrObj){
          cb(null, commentsArrObj._id);
})

建议:使用mongoose使用ref填充记录,这样您就不需要找到单独的查询来获取评论。