Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用数组中的值更新MongoDB集合_Javascript_Arrays_Mongodb - Fatal编程技术网

Javascript 使用数组中的值更新MongoDB集合

Javascript 使用数组中的值更新MongoDB集合,javascript,arrays,mongodb,Javascript,Arrays,Mongodb,我需要使用数组中的值更新MongoDB集合中的所有文档 例如,假设我在mongo中有以下模式中的文档: { "key":"value", "key2":"value2" } 我有一个数组:[“test”,“test2”] 我想通过数组创建一个迭代器,这样集合中所有文档中的“keyN”键都会更新为“test”或“test2” 我该怎么做?我尝试使用forEach,但无法找到在数组上创建迭代器的方法 不确定这是否是您想要的……这里是一个使用mongoose模式的测试,而不是实际的mongodb

我需要使用数组中的值更新MongoDB集合中的所有文档

例如,假设我在mongo中有以下模式中的文档:

{
 "key":"value",
 "key2":"value2"
}
我有一个数组:[“test”,“test2”]

我想通过数组创建一个迭代器,这样集合中所有文档中的“keyN”键都会更新为“test”或“test2”


我该怎么做?我尝试使用forEach,但无法找到在数组上创建迭代器的方法

不确定这是否是您想要的……这里是一个使用mongoose模式的测试,而不是实际的mongodb文档

将答案标记为正确,或者让我知道测试/代码是否需要改进

摩卡测试文件

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(); 
});
});
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;
代码文件

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(); 
});
});
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;
或者

运行输入数组中的值的另一个测试,如果这是您的意思:

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(); 
});

那么,问题是什么?我编辑了原始问题。我只是想知道怎么做?遍历数组是可以的,但是在数组末尾,如何返回到第一个元素?