2016-01-24 103 views
0

我想這一點:貓鼬findOneAndUpdate總是創建新文檔

var query= {'boardUrl':data.url,'shapes':data.canvas}; 
    Shape.findOneAndUpdate(query,query,{upsert:true},function(err,doc){ 
     if (err){ 
     console.log(err); 
     } 

    }); 

我要的是檢查,如果在我的Shapes集合已經有與具有相同boardUrl和更新的文檔。如果不存在,請使用boardUrl和形狀創建一個新文檔。

我的外形集合如下:被隨時創建

var shapeSchema = mongoose.Schema({ 
boardUrl: String, 
shapes: String 
}); 

一個新的文檔。你們可以看看我的查詢有什麼問題嗎? 謝謝

+0

要查詢找到數據'**和''形狀',但你說,你只想通過'boardUrl'來檢查。 – qqilihq

+0

哦謝謝!如果你將這個答案作爲答案,我可以選擇它作爲答案 –

+0

很高興它的工作,已經有了類似的答案,只需選擇這一個;-) – qqilihq

回答

1

如果我明白了,你的條件還包括一個你不想要的'shapes'的平等。刪除:你的條件應該只檢查'boardUrl'

嘗試:

var condition = {'boardUrl':data.url}; 
var doc = {'boardUrl':data.url,'shapes':data.canvas}; 
Shape.findOneAndUpdate(condition,doc,{upsert:true},function(err,doc){ 
    if (err){ 
    console.log(err); 
} 
}); 

這樣一來,當找不到data.url一個新的文件將被插入。當它被發現時,shapes將被更新爲data.canvas

希望這是你想要的東西

-1

一個方法是通過驗證,可以用戶findOrCreate方法,如果有更新,否則在數據庫中`boardUrl進入新的條目

Shape.findOrCreate({ 
where: shapeCondition 
}) 
.spread(function (Shape, created) { 
if (created == false) { 
    (write update query) 
    return callback(err); 
} else { 

    return callback(null, data); 
} 

}).catch(function (err) { 
err.exception = "error message"; 
return callback(err); 
});