首页 > 解决方案 > 并非所有嵌套数组值都显示 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);

标签: node.jsreactjsmongodbmongoosemongoose-schema

解决方案


我可以在第一个控制台日志中看到,不知何故,一个名为“name”的新属性被添加到数据中,我不确定在哪里。

但是,您的架构使用属性“标题”,这些需要匹配。

每当我的猫鼬响应中缺少一个属性时,我都会看到像这样的猫鼬排除字段。这通常是我的查询中的数据和我的模型之间的冲突。


推荐阅读