2017-09-28 1 views
-2

Ich muss alle Dokumente in einer MongoDB-Sammlung mit Werten aus einem Array aktualisieren.MongoDB-Sammlung mit Werten aus einem Array aktualisieren

zum Beispiel sagen, ich habe die Dokumente in folgendem Schema in Mongo:

{ 
"key":"value", 
"key2":"value2" 
} 

Ich habe ein Array: [ "Test", "test2"]

Ich mag einen Iterator über die schaffen Array, so dass die "Keyn" Taste in allen docs in den Sammlungen sind entweder mit "test" oder "test2"

{ 
    "key":"value", 
    "key2":"value2", 
    "keyN":"test" 
} 
{ 
    "key":"value", 
    "key2":"value2", 
    "keyN":"test2" 
} 
{ 
    "key":"value", 
    "key2":"value2", 
    "keyN":"test" 
} 

aktualisiert Wie kann ich das tun? Ich habe versucht, forEach zu verwenden, aber ich bin nicht in der Lage, den Weg zu einem Iterator auf dem Array zu erstellen.

+0

Also, was ist die Frage? – user2347763

+1

Ich habe die ursprüngliche Frage bearbeitet. Ich wüsste nur, wie man das macht? Das Iterieren durch das Array ist in Ordnung, aber wie gehe ich am Ende des Arrays zum ersten Element zurück? – user2405589

Antwort

0

Nicht sicher, ob das, was Sie suchen ... hier ist ein Teststück mit Mungo Schema nicht das eigentliche Mongodb Dokument.

Markieren Sie die Antwort als korrekt oder lassen Sie mich wissen, ob der Test/Code eine Verbesserung benötigt.

Mocha Test result

Mokka-Testdatei

var expect = require('chai').expect,mongooseMock = require('mongoose- 
mock'),proxyquire=require('proxyquire'), 
sinon = require('sinon'), chai=require('chai'),sinonChai = require("sinon-chai");chai.use(sinonChai); 

var AIterator; 
describe('model', function() { 
     beforeEach(function (done) { 
       AIterator = proxyquire('./ArrayIterator', {'mongoose': mongooseMock});    done(); 
     }); 
it("should iterate the array",function(done){ 
     setTimeout(done, 15000); 
     var callback = sinon.spy(); 
     var aIterator =[]; 
     aIterator[0]= AIterator.create({"key":"value1","key2":"value2","keyN":"value3"}, callback); 
     aIterator[1]= AIterator.create({"key":"value4","key2":"value5","keyN":"value6"}, callback); 
     aIterator[2]= AIterator.create({"key":"value7","key2":"value8","keyN":"value9"}, callback); 
     var x=0; 
     aIterator.forEach(function(element) { 
       if (element.keyN=="value9") 
       { 
       element.keyN="test";   
       }     
     }, this); 
     expect(aIterator[2].keyN).equals("value3"); 
     done(); 
}); 
}); 

-Code-Datei

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var arraySchema = new Schema({ 
    key:String, 
    key2:String, 
    keyN:String 
}); 

var NewArray = new mongoose.Schema(arraySchema); 
NewArray.statics.create = function (params, callback) { 
    var newUpdate = new NewArray(params); 
    newUpdate.save(function(err, result) { 
    callback(err, result); 
    }); 
    return newUpdate; 
}; 
var ArrayIterator = mongoose.model('Model', NewArray); 
module.exports = ArrayIterator; 

Oder

ein weiterer Test th laufen e Werte in der Eingabe-Array, wenn dies was du meinst:

it("should iterate the array",function(done){ 
     setTimeout(done, 15000); 
     var callback = sinon.spy(); 
     var testArray=["test","test1"]; 
     var aIterator =[]; 
     aIterator[0]= AIterator.create({"key":"value1","key2":"value2","keyN":"value3"}, callback); 
     aIterator[1]= AIterator.create({"key":"value4","key2":"value5","keyN":"value6"}, callback); 
     aIterator[2]= AIterator.create({"key":"value7","key2":"value8","keyN":"value9"}, callback); 
     var x=0; 
     testArray.forEach(function(element){ 
       if (element=="test") 
       { 
       aIterator.forEach(function(element1) { 
       if (element1.keyN=="value9") 
       { 
        element1.keyN=element;   
         }     
       }, this); 
       } 
       },this); 
     expect(aIterator[2].keyN).equals("value3"); 
     done(); 
}); 
Verwandte Themen