node.js - 并非所有嵌套数组值都显示 MongoDB
问题描述
我正在使用 mongoose、react 等创建一个 MERN 应用程序......我正在尝试使用 axios 创建一个发布函数以向我的数据库添加一个新列表。直到最后一切都很好。我的前端使用 axios 和路由将信息传递给后端,就在我执行 list.save() 之前,我什至 console.log 我正在保存的内容,一切看起来都很好。然后我将查看我的数据库,我的列表中的项目仅按他们的 ID 存储,我根本无法访问他们的 name 属性。我不知道为什么它只是没有出现。我会尝试提供我的代码,但所有内容都被分成不同的文件和文件夹用于后端前端,所以我希望我的代码和解释是有意义的。
function addList(listTitle) {
const newList = {
title: listTitle
}
Axios.post("http://localhost:4000/todos/add", newList)
.then(res => console.log(res.data));
}
以上是我添加列表的帖子请求
Routes.route("/add")
.post(function(req, res) {
let list = new List({
title: req.body.title,
items: defaultItems
});
console.log(list.items)
list.save()
.then(list => {
res.status(200).json({"list": "list added successfully"})
})
.catch(err => {
res.status(400).send(err);
console.log(err);
});
});
这是我的完美路线,我能够记录所有内容并且看起来不错。
[{"_id":"5fdcba16b08f7b1380853557","name":"Welcome to your todolist!"},{"_id":"5fdcba16b08f7b1380853558","name":"Hit the + button to add a new item."},{"_id":"5fdcba16b08f7b1380853559","name":"<-- Hit this to delete an item."}]
这就是路由功能中上述console.log记录的内容,这证明了项目有一个名字和一切。但是然后使用我的网站或使用邮递员,或者只是查看我的 mongodb 地图集集合,这就是我的列表项显示的内容。
{"_id":{"$oid":"5fdcbda6068da20c90ffc267"},"items":[{"$oid":"5fdcbd98068da20c90ffc264"},{"$oid":"5fdcbd98068da20c90ffc265"},{"$oid":"5fdcbd98068da20c90ffc266"}],"title":"anotha one","__v":{"$numberInt":"0"}}
我不知道为什么在我执行 list.save() 之前它会很好地显示我的项目及其名称,但是一旦我查看我的数据库,它就消失了。我不知道这是否有帮助,但我每次保存的项目都是相同的默认项目,是否有可能 mongoose/mongodb 每次都试图引用它们,因为它知道它们是相同的?我不知道这是否有帮助或只是使情况更加混乱,但请尽可能提供帮助。
这里要求的是我的两个模式。
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const itemsSchema = new Schema({
name: String,
listId: String
});
module.exports = mongoose.model('Item', itemsSchema);
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const Item = require('./Item');
var listsSchema = new Schema({
title: String,
items: [{type: Schema.Types.ObjectId, ref: 'Item'}]
});
module.exports = mongoose.model('List', listsSchema);
解决方案
我可以在第一个控制台日志中看到,不知何故,一个名为“name”的新属性被添加到数据中,我不确定在哪里。
但是,您的架构使用属性“标题”,这些需要匹配。
每当我的猫鼬响应中缺少一个属性时,我都会看到像这样的猫鼬排除字段。这通常是我的查询中的数据和我的模型之间的冲突。
推荐阅读
- python - 如何修复''在位置 2 没有重复的内容''
- ansible - 为什么 Ansible 会忽略我的库存文件?
- django - 权限类装饰器被忽略。“未提供身份验证凭据”响应
- sql - PostgreSQL group_concat 行作为 json
- ios - FaceID动画完成后如何准确回调?
- python-3.x - 从网页中提取 URL 链接
- java - Java getter setter 无法存储值
- amazon-cloudfront - 使用 aws cli 在 extsting 云端分发中添加额外的来源和行为
- mongodb - 快速查询MongoDB的数据结构设计
- swift - 任何人都可以帮助我如何从给定的示例中获得价值,因为我是 swift 新手