2016-04-18 4 views
0

Ich versuche, Arrays aus einer Sammlung in eine andere zu schieben. dies ist der Code habe ich in meinem Server js

updateSettings: function(generalValue) { 
    let userId = Meteor.userId(); 
     let settingsDetails = GeneralSettings.findOne({ 
    "_id": generalValue 
}); 
      Meteor.users.update({ 
    _id: userId 
    }, { 
    $push: { 

     "settings._id": generalValue, 
     "settings.name": settingsDetails.name, 
     "settings.description": settingsDetails.description, 
     "settings.tag": settingsDetails.tag, 
     "settings.type": settingsDetails.type, 
     "settings.status": settingsDetails.status 
    } 


    }) 

} 

updateSettings ist die Meteor-Methode. GeneralSettings ist die erste Sammlung und Benutzer ist die zweite Sammlung. Ich möchte Arrays von GeneralSettings in die Benutzersammlung verschieben. Während ich dies das Ergebnis versuchen bekam ich ist wie

"settings" : { 
    "_id" : [ 
     "GdfaHPoT5FXW78aw5", 
     "GdfaHPoT5FXW78awi" 

    ], 
    "name" : [ 
     "URL", 
     "TEXT" 

    ], 
    "description" : [ 
     "https://docs.mongodb.org/manual/reference/method/db.collection.update/", 
     "this is a random text" 

    ], 
    "tag" : [ 
     "This is a demo of an Url selected", 
     "demo for random text" 
    ], 
    "type" : [ 
     "url", 
     "text" 
    ], 
    "status" : [ 
     false, 
     false 
    ] 
} 

Aber der Ausgang ich will, ist

"settings" : { 
    "_id" : "GdfaHPoT5FXW78aw5", 

    "name" : "URL", 

    "description" : 
     "https://docs.mongodb.org/manual/reference/method/db.collection.update/", 

    "tag" :"This is a demo of an Url selected", 

    "type" : "url", 


    "status" : false 



}, 

Welche Änderungen Inorder in meinem server.js gemacht sein, um diese Ausgabe

+0

Versuchen Sie, '$ set' anstelle von' $ push' hier zu verwenden. Sie drücken zu Arrays, aber ich denke nicht, dass 'settings._id' zum Beispiel ein Array ist – durrrr

Antwort

3

Diese zu erhalten ist ein Fall, in dem Sie "Punktnotation" nicht verwenden möchten. Der $push Betreiber erwartet und Object oder ist im Grunde die „rechte Seite“, um den in der „linken Seitentaste“ genannt Array gehen hinzuzufügen:

// Make your life easy and just update this object 
settingDetails._id = generalValue; 

// Then you are just "pushing" the whole thing into the "settings" array 
Meteor.users.update(
    { _id: userId }, 
    { "$push": { "settings": settingDetails } } 
) 

Wenn Sie für jedes Element „Punktnotation“ verwendet wird, dann ist das um die Erstellung von "Arrays" für "jeden" der einzelnen "Schlüssel" zu bitten. Es ist also nur "ein" Array-Schlüssel und das Objekt, das als Argument hinzugefügt werden soll.

+0

Danke, es hat funktioniert :) –