簡體   English   中英

貓鼬$ inc返回“未定義不是函數”

[英]mongoose $inc returns “undefined is not a function”

我試圖使用NodeJS和MongoDB(與Mongoose ORM)進行類似的切換。

當我使用find()找到特定的帖子時,我將其傳遞給以下函數,該函數在Like集合中添加了新數據。

代碼如下所示:

...
Post.findOne({
    _id:req.params.post_id
}, function(err, post){
    if(err){
        return res.json({
            type:false, 
            message:"error finding post"
        });
    }else if(!post){
        return res.json({
            type:false, 
            message:"there is no post with the id"
        });         
    }else{
        callback(null, post); //returns post instance
    }
});

... //skipped because the code is too long

var like = new Like({
    post_id: req.params.post_id,
    user_id: req.user.id
});         
console.log(result);
like.save(function(err, updated_like){ //save the like data first
    if(err){ 
        return res.json({
            type:false,
            message:"could not save like"
        });
    } else {
        //trying to update post with the new data
        post.likes.$inc(); // PROBLEM HERE
        post.like_user_id.push(req.user.id); //no problem with this
        post.save(function(err){
            if(err){
                return res.json({
                    type:false, 
                    message:"could not like"
                });
            } 
            return res.json({
                type:true, 
                message:"liked"
            });
        });
    }
});
...

我特林落實底部的實踐這個頁面。

(示例代碼):

Model.findOne({ name: 'borne' }, function (err, doc){
  doc.name = 'jason borne';
  doc.visits.$inc();
  doc.save();
});

我的代碼基本上看起來一樣,但是它給出了以下錯誤:(like_ctrl.js:90:18是發生問題的地方!)

or: undefined is not a function
or: undefined is not a function
EventEmitter.<anonymous> (C:\Users\NI\projects\pook\app\controllers\like_ctrl.js:90:18) 
EventEmitter.<anonymous> (C:\Users\NI\projects\pook\node_modules\mongoose\node_modules\mpromi
promise.js:175:45)
EventEmitter.emit (events.js:110:17)
Promise.safeEmit (C:\Users\NI\projects\pook\node_modules\mongoose\node_modules\mpromise\lib\p
js:81:21)
Promise.fulfill (C:\Users\NI\projects\pook\node_modules\mongoose\node_modules\mpromise\lib\pr
s:94:24)
Promise.resolve (C:\Users\NI\projects\pook\node_modules\mongoose\lib\promise.js:113:23)
model.<anonymous> (C:\Users\NI\projects\pook\node_modules\mongoose\lib\document.js:1569:39)
next_ (C:\Users\NI\projects\pook\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:89:3

EventEmitter.fnWrapper (C:\Users\NI\projects\pook\node_modules\mongoose\node_modules\hooks-fi
ks.js:171:15)
EventEmitter.<anonymous> (C:\Users\NI\projects\pook\node_modules\mongoose\node_modules\mpromi
promise.js:175:45)
EventEmitter.emit (events.js:110:17)
Promise.safeEmit (C:\Users\NI\projects\pook\node_modules\mongoose\node_modules\mpromise\lib\p
js:81:21)
Promise.fulfill (C:\Users\NI\projects\pook\node_modules\mongoose\node_modules\mpromise\lib\pr
s:94:24)
p1.then.then.self.isNew (C:\Users\NI\projects\pook\node_modules\mongoose\lib\model.js:254:27)

newTickHandler (C:\Users\NI\projects\pook\node_modules\mongoose\node_modules\mpromise\lib\pro
:229:18)
process._tickCallback (node.js:355:11)
=============

我在這里做錯了什么?

加上這個

我有看起來像的發布架構

var postSchema  = new Schema({
    title: {type:String},
    content: {type:String},
    likes:{type:Number, default:0},
    like_user_id:[{type:Schema.ObjectId, ref:'Like'}]
});

這個和類似的架構如下所示:

var likeSchema  = new Schema({
    user_id: Schema.ObjectId,
    post_id: {type:Schema.ObjectId, ref:'Post'},
    created_at:{type:Date, default:Date.now}
});

問題是我正在查看Mongoose 2.7文檔,而在Mongoose 4中不再支持返回實例上的$ inc原型。

但是,新文檔中沒有相關代碼代替$ inc。

因此,我找到了自己的方式,解決方案非常簡單。

只是做post.likes++; 而不是post.likes.$inc();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM