2015-05-22 8 views
5

Ich möchte diese Werte in mongodb einfügen und hier ist mein Code, ich bin in der Lage, es einzufügen, aber wenn ich nur access_policy in Admin_Sektion aktualisiert wurde, konnte ich nicht tun Damit kann jemand bitte helfen sie mir, wie kann ich sie lösen: meteor.jsonwie verschachtelte JSON-Arrays mit meteor.js zu aktualisieren

{ 
    "_id" : ObjectId("555ebffa7c88507a4a683e81"), 
    "section_id" : "Admin Section", 
    "is_active" : true, 
    "admin_section" : [ 
     { 
      "_id" : 1, 
      "info" : "Setup custom access policy for user groups", 
      "sub_section" : "Setup - access policy", 
      "access_policy" : "ROOT" 
     }, 
     { 
      "_id" : 2, 
      "info" : "Customize access policy for main sections", 
      "sub_section" : "Manage - access policy", 
      "access_policy" : "ROOT" 
     }, 
     { 
      "_id" : 3, 
      "info" : "Manage user groups for DX-Client application", 
      "sub_section" : "Manage - user groups", 
      "access_policy" : "ROOT" 
     }, 
     { 
      "_id" : 4, 
      "info" : "Manage users for DX-Client application", 
      "sub_section" : "Create - user", 
      "access_policy" : "ADMINISTRATOR" 
     }, 
    ], 
    "access_policy" : "ADMINISTRATOR" 
    } 

meteor.html

<table class="table table-bordered"> 
     <tbody> 
     {{#each temp_admin_section}} 
      {{#if admin_section}} 
       <tr class="bgLight"> 
        <td class="left" id="one"><b>{{ section_id }}</b></td> 
        <td class="left" id="two"><b>RESTRICTED</b> - <code contenteditable="true" class="edited"><input value="{{ access_policy }}" /></code><a class="add-access pull-right">add</a></td> 
       </tr> 
      {{#each admin_section}} 
       <tr> 
        <td class="left" id="one">{{ sub_section }}</td> 
        <td class="left" id="two">RESTRICTED - <code contenteditable="true" class="edited"> 
        <input value="{{ access_policy }}" /></code></td> 
       </tr> 
      {{/each}} 
      {{/if}} 
     {{/each}} 
     </tbody> 
    </table> 

meteor.js

'change .edited': function(event, template){ 
    var to = event.target.value; 
    var list = to.split(","); 
    map.update(
    {"_id": this._id, "admin_section._id" : 1}, 
    {$set: {"admin_section.$.access_policy": list}} 
); 
} 

Antwort

0

Der gesamte clientseitige Code gilt als nicht vertrauenswürdig, wenn Sie nicht eine Meteor.call aufrufen und eine serverseitige Methode die Aktualisierung durchführen lassen. Wenn Sie in der Konsole suchen, werden Sie wahrscheinlich einen Fehler wie diese:

{ 
    error: 403, 
    reason: "Not permitted. Untrusted code may only update documents by ID.", 
    details: undefined, message: "Not permitted. Untrusted code may only update documents by ID. [403]", 
    errorType: "Meteor.Error" 
} 

Auf der Client-Seite, nur 1 Dokument zu einem Zeitpunkt aktualisieren kann, und Sie müssen das Dokument von ID zu aktualisieren wählen, so dass das erste Argument muss einen mongo Dokument-ID sein, nicht ein mongo Selektor:

MyCollection.update(
    this._id, 
    { 
    $set: { "admin_section.1.access_policy": "TEST" } 
    } 
) 

, auch ein Unter Dokument eines Arrays zu aktualisieren, anstatt die ID in dem ersten Argumente als Selektor, Ankündigung Angabe wie ich die ID in der $set-Anweisung angeben.

Wenn Sie alle Elemente im Array aktualisieren möchten, müssen Sie eine Schleife durch alle von ihnen einzeln:

var doc = MyCollection.findOne(this._id); 
var adminSections = doc.admin_section; 

for (i = 0; i < adminSections.length; i++) { 
    // If you need to access a value in the nested doc: 
    var nestedDoc = adminSections[i]; 
    MyCollection.update(
    this._id, 
    { 
     $set: { "admin_section." + (i+1) + ".access_policy": "someValue" } 
    } 
); 
{ 
+0

es nur für die erste Reihe von „admin_section“ arbeiten, aber ich habe zu aktualisieren „access_policy“ jedes Array als dynamisch nach ID eines Arrays, bitte helfen. –

+0

Siehe aktualisierte Antwort - ist das wonach Sie suchen? –

Verwandte Themen