gpt4 book ai didi

javascript - 如何使用带有严格 : false schema? 的 mongoose 将字段添加到 mongoDB 文档中

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:29 25 4
gpt4 key购买 nike

我正在尝试为我的 IT 公司实现一些数据处理任务的自动化。我需要能够循环遍历集合,查找具有给定数字 ID(而不是 ObjectID)的所有文档,并将它们作为数组字段添加到来自不同集合的文档。这就是我尝试的方法:

voter.find({"District" : {"$eq" : "D"}}).stream()
.on('data', function (doc) {

var reg = new RegExp(doc._doc.Registration_Number, "i");
history.find({"Registration_Number" : {"$eq" : Number(doc._doc.Registration_Number)}}, function (err, docs) {
var arr = new Array(); //In the context of a single voter!
u.each(docs, function (v, k) {
if (v) {
console.log(v._doc.ElectionDate); //Only if Registration_Number of voter matches history doc.
arr.push(v._doc.ElectionDate);
}
});

//Now we have array of history
doc.update({"Registration_Number" : {"$eq" : Number(doc._doc.Registration_Number)}}, {VotingHistory : arr}, {multi : true}, function (error, num) {
if (err) console.log("SOMETHING WENT VERY WRONG");
console.log(dat);
});

});
})
.on('error', function (err) {
console.log(err);
})
.on('end', function () {
console.log("Ending voter stream.");
})

更新回调永远不会触发,尽管我尝试使用相同的查询使用 voter.find() ,并且每次使用有效的 Registration_Number 时它都会返回一位选民。我需要使用不可预测的字段名称来自动执行此操作,因此我希望尽可能避免使用模式。我当前的架构是简单的:

var mongoose = require('mongoose');
var voter = new mongoose.Schema({}, {
strict: false,
collection: 'voters'
});

module.exports = mongoose.model('voter', voter);

有人知道我如何才能完成这项工作吗?这个问题与很多其他问题类似,但我见过的每个问题都用 model.update() 回答,但我似乎无法正常工作。

我的代码运行了一段时间,仅打印出 ElectionDate,并且更新回调从未触发。当我让它运行时,它会出现以下错误:

MY_DIRECTORY\THE_APP\node_modules\mongoose\lib\query.js:2008
oldCb(error, result ? result.result : { ok: 0, n: 0, nModified: 0 });
^
TypeError: object is not a function
at callback (MY_DIRECTORY\THE_APP\node_modules\mongoose\lib\query.js:2008:7)
at Object.<anonymous> (MY_DIRECTORY\THE_APP\node_modules\mongoose\node_modules\kareem\index.js:160:11)
at Object._onImmediate (MY_DIRECTORY\THE_APP\node_modules\mongoose\node_modules\mquery\lib\utils.js:137:16)
at processImmediate [as _immediateCallback] (timers.js:354:15)
15 Oct 09:13:31 - [nodemon] app crashed - waiting for file changes before starting...

最佳答案

解决方案虽然不太好,但还是修改 doc._doc 并在更新函数中使用 overwrite: true 选项。完整代码:

voter.find({"District" : {"$eq" : "D"}}).stream()
.on('data', function (doc) {

var reg = new RegExp(doc._doc.Registration_Number, "i");
history.find({"Registration_Number" : {"$eq" : Number(doc._doc.Registration_Number)}}, function (err, docs) {
var arr = new Array(); //In the context of a single voter!
u.each(docs, function (v, k) {
if (v) {
console.log(v._doc.ElectionDate); //Only if Registration_Number of voter matches history doc.
arr.push(v._doc.ElectionDate);
}
});

//Now we have array of history
doc._doc.VotingHistory = arr;
console.log(doc._doc);
voter.update({ "Registration_Number" : doc._doc.Registration_Number}, doc._doc, {overwrite : true }, function (er, num) {
if (er) console.log("ERRRRRRRRRRRRRRRRRRRRRRRRRR");
console.log("NUMBER AFFECTED (should always be 1) : " + num);
});

});
})
.on('error', function (err) {
console.log(err);
})
.on('end', function () {
console.log("Ending voter stream.");
});

关于javascript - 如何使用带有严格 : false schema? 的 mongoose 将字段添加到 mongoDB 文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33152465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com