gpt4 book ai didi

mongodb - Mongoose 查找结果,然后用 findOne 替换字段

转载 作者:可可西里 更新时间:2023-11-01 09:35:53 26 4
gpt4 key购买 nike

我是 mongodb 的新手,来自关系数据库,没有加入,继续使用 mongodb 对我来说是一种痛苦。

我想在此处存档的是获取所有项目并使用正确的项目类型名称而不是项目类型 ID 更新 projectType。不知何故 projects.attrubtes 无法被覆盖。然后我尝试了以下帖子。没有运气。任何帮助表示赞赏。任何人都可以给我一些指导,将不胜感激。

Why can't you modify the data returned by a Mongoose Query (ex: findById)

var _ = require('lodash');
var project = require('./project.model');
var Form = require('../form/form.model');

// Get list of projects
exports.index = function(req, res) {
project.find(function (err, projects) {
if(err) { return handleError(res, err); }

_.each(projects, function(element, index){
Form.findOne({_id : projects[index].projectType}, '-formContent -_id -createdDateTime', function(error, form){

if(form !== undefined) projects[index].projectType = form.formName;
});
});

return res.json(200, projects);
}).sort({ createdDateTime: 'desc' });
};

最佳答案

Mongoose documents 不允许添加属性。您需要调用 lean() exec() 之前的方法,因为从启用了 lean 选项的查询返回的文档是普通 javascript 对象,或者将返回的文档转换为普通对象:

来自 docs :

project.find().lean().exec(function (err, projects) {
projects[0] instanceof mongoose.Document // false
});

所以你的代码应该是这样的:

project.find()
.lean()
.exec(function (err, projects) {
if(err) { return handleError(res, err); }

_.each(projects, function(element, index){
Form.findOne(
{_id : projects[index].projectType},
'-formContent -_id -createdDateTime',
function(error, form){
if(form !== undefined) projects[index].projectType = form.formName;
}
);
});

return res.json(200, projects);
}).sort({ createdDateTime: 'desc' });

或者将返回的文档转换为普通对象:

project.find()
.exec(function (err, docs) {
if(err) return res.send(err);
var projects = [];
_.each(docs, function(item, i) {
var obj = item.toObject();
Form.findOne(
{_id : docs[i].projectType}, /* {_id : item.projectType} */
'-formContent -_id -createdDateTime',
function(error, form){
if(form !== undefined) {
obj.projectType = form.formName;
projects.push(obj);
}
}
);
});

res.send(projects);
});

关于mongodb - Mongoose 查找结果,然后用 findOne 替换字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31106869/

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