2016-10-20 124 views
2

瀏覽器控制檯說:允許規則更新流星的MongoDB

更新失敗:拒絕訪問

下面的代碼應允許客戶value陣列的值設置爲undefined,但它失敗與上述錯誤。
任何想法爲什麼以及如何解決它?由於

//client 
const doc = myCol.findOne({element: 'abc'}); 
myCol.update({_id: doc._id}, {$set: {value: undefined}}); 

//server 
myCol.allow({ 
    update: function(userId, doc, fields, modifier) { 
     console.log(modifier); // -----=> { '$set': {} } --------------why? 
     let edits = {$set: {value: undefined}}; 

     const userVarified = (userId && doc.userId == userId); 
     const ABC = (doc.element === 'abc'); 
     const XYZ = (doc.action === 'xyz' && doc.element === 'x' && doc.name === 'y' && _.difference(fields, ['values]).length === 0); 
     try { 
     if (userVarified) { 
      if (ABC) { 
       check(modifier, Match.OneOf(edits)); 
      } else if (XYZ) { 
       return true; 
      } 
     } 
     } catch (e) { 
     return false; 
     } 
     return true; 
    } 
}); 

編輯1
modifier是{ '$set': {} }當服務器得到它。任何想法爲什麼?

編輯2
根據Mikkel答案,它修復了「編輯1」中的錯誤。
代碼現在使用修飾符{ '$set': { value: '' } }

現在表達式check(modifier, Match.OneOf(checkEdit));給出了錯誤,但我期望它匹配,因爲客戶端發送和console.log(modifier)是相同的。
任何想法爲什麼它是假的?

固定
import { Match } from 'meteor/check'添加到該文件的頂部和
使用Match.test(modifier, checkEdit);代替。

+0

你幾乎得到它,但你需要使用$未設置,而不是$設置 – Mikkel

回答

2

試圖設置一個值爲'undefined'是不合情理的,Mongo不會讓你這樣做。

我認爲你應該使用$未設置代替,按蒙戈文檔:

$未設置的$取消設置操作刪除某一特定領域。考慮以下語法:

{$ unset:{:「」,...}} $ unset 表達式中的指定值(即「」)不影響操作。

若要在嵌入式文檔或陣列中指定,請使用點號 表示法。

https://docs.mongodb.com/manual/reference/operator/update/unset/

+0

請參閱**編輯2 ** –