簡體   English   中英

使用數組中的值更新 MongoDB 集合

[英]Update MongoDB collection with values from an array

我需要使用數組中的值更新 MongoDB 集合中的所有文檔。

例如,我在 mongo 中有以下架構中的文檔:

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

我有一個數組:["test","test2"]

我想通過數組創建一個迭代器,因此集合中所有文檔中的“keyN”鍵都更新為“test”或“test2”

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

我該怎么做呢? 我嘗試使用 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;

或者,

運行輸入數組中的值的另一個測試,如果這是你的意思:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM