[英]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.