Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么填充后的值数组变为空?_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 为什么填充后的值数组变为空?

Javascript 为什么填充后的值数组变为空?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我想在我的帖子上填写答案(评论)。但在填充时它变为null,而在此之前它存储答案的Id 我的邮政模式 我的答案模式 这不起作用 我举了一个简单的例子,它是有效的 const mongoose = require("mongoose"); mongoose.connect("mongodb://localhost:27017/test", {useNewUrlParser: true}); const UserSchema = new mongoose.Schema({ name: S

我想在我的帖子上填写答案(评论)。但在填充时它变为null,而在此之前它存储答案的Id

我的邮政模式 我的答案模式 这不起作用
我举了一个简单的例子,它是有效的

const mongoose = require("mongoose");

mongoose.connect("mongodb://localhost:27017/test", {useNewUrlParser: true});

const UserSchema = new mongoose.Schema({
    name: String,
    comments: [{type: mongoose.Schema.Types.ObjectId, ref: "Comments"}]
});

const CommentSchema = new mongoose.Schema({
    content: ""
});

const Users = mongoose.model("Users", UserSchema);
const Comments = mongoose.model("Comments", CommentSchema);

// Adding data
Promise.all([
    new Comments({content: "test 1"}).save(),
    new Comments({content: "test 2"}).save(),
    new Comments({content: "test 3"}).save()
]).then(result => {
    result = result.map(r => r._id);
    new Users({name: "test", comments: result}).save().then(user => {
        // Getting with populate
        Users.findById(user._id).populate("comments").then(console.log);
    })
}).catch(console.error);
在控制台中:

{ comments:
   [ { _id: 5c979d9dedc0b1db90fe81dd, content: 'test 1', __v: 0 },
     { _id: 5c979d9dedc0b1db90fe81de, content: 'test 2', __v: 0 },
     { _id: 5c979d9dedc0b1db90fe81df, content: 'test 3', __v: 0 } ],
  _id: 5c979d9dedc0b1db90fe81e0,
  name: 'test',
  __v: 0 }

也许找到错误会有帮助

我举了一个简单的例子,它是有效的

const mongoose = require("mongoose");

mongoose.connect("mongodb://localhost:27017/test", {useNewUrlParser: true});

const UserSchema = new mongoose.Schema({
    name: String,
    comments: [{type: mongoose.Schema.Types.ObjectId, ref: "Comments"}]
});

const CommentSchema = new mongoose.Schema({
    content: ""
});

const Users = mongoose.model("Users", UserSchema);
const Comments = mongoose.model("Comments", CommentSchema);

// Adding data
Promise.all([
    new Comments({content: "test 1"}).save(),
    new Comments({content: "test 2"}).save(),
    new Comments({content: "test 3"}).save()
]).then(result => {
    result = result.map(r => r._id);
    new Users({name: "test", comments: result}).save().then(user => {
        // Getting with populate
        Users.findById(user._id).populate("comments").then(console.log);
    })
}).catch(console.error);
在控制台中:

{ comments:
   [ { _id: 5c979d9dedc0b1db90fe81dd, content: 'test 1', __v: 0 },
     { _id: 5c979d9dedc0b1db90fe81de, content: 'test 2', __v: 0 },
     { _id: 5c979d9dedc0b1db90fe81df, content: 'test 3', __v: 0 } ],
  _id: 5c979d9dedc0b1db90fe81e0,
  name: 'test',
  __v: 0 }

也许找到错误会有所帮助

这里有两种观点。首先,你可能想让作者知道哪些故事是他们的。通常,模式应该通过在“多”端使用父指针来解析一对多关系。但是,如果您有充分的理由想要一个子指针数组,可以将()文档推送到数组中,如下所示。
@NikitaUmnov感谢您的帮助。但是你能告诉我现在该怎么办吗,因为它不起作用了。我应该编写暴力代码来填充吗?如果有疑问,您可以编辑您的问题,以包括
疑问
集合中的文档以及您认为相关的
答案
文档,这些文档显示为
。不过,您可能会发现,
答案
集合中的
\u id
值与父文档的
答案
数组中的值不匹配,因为您的代码可能插入了不同的值,或者根本没有保存
答案
文档。所以这是“创造密码”,而不是“人口密码”,这是这里的问题。如果您没有发现问题,请显示该代码。@NeilLunn当我签出数据库时,DoutSchema的“answers”包含answers的ObjectId。当我使用“填充('answers')”时,唯一的问题出现了。然后,它会使Doutschema的答案无效。实际上,你被要求做的是“显示文档”。如果你认为数据是正确的,那么一定要“显示出来”。然后有人可以实际使用相同的数据来重现问题,或者不重现。对于后一种情况,实际上只能显示一个示例,该示例可能与问题中未包含的其他代码有所不同。但是您确实需要先*显示数据。
这里有两个透视图。首先,您可能希望作者知道哪些故事是他们的。通常,您的模式应该通过在“多”端使用父指针来解决一对多关系。但是,如果您有充分的理由想要子指针数组,您可以推送()如下图所示,将文档添加到数组中。
@NikitaUmnov感谢您的帮助。但是,您能告诉我现在该怎么做吗,因为它不起作用。我应该编写暴力代码来填充吗?如果有疑问,您可以编辑您的问题,以包括您的
怀疑
集合中的文档和您相信的
答案
文档要关联显示为
null
。但您可能会发现,
答案
集合中的
\u id
值与父文档的
答案
数组中的值不匹配,因为您的代码可能插入了不同的值,或者可能从未保存
answers
文档。所以这里的问题是“创建代码”而不是“总体代码”。如果没有发现问题,请显示代码。@NeilLunn当我检查数据库时,do疑模式的“答案”包含答案的ObjectId。唯一的问题是当我使用“填充('answers')时出现的" . 然后,它会使Doutschema的答案无效。实际上,你被要求做的是“显示文档”。如果你认为数据是正确的,那么一定要“显示出来”。然后有人可以实际使用相同的数据来重现问题,或者不重现。对于后一种情况,实际上只能显示一个示例,该示例可能与问题中未包含的其他代码有所不同。但你真的需要先“显示数据”。
{ comments:
   [ { _id: 5c979d9dedc0b1db90fe81dd, content: 'test 1', __v: 0 },
     { _id: 5c979d9dedc0b1db90fe81de, content: 'test 2', __v: 0 },
     { _id: 5c979d9dedc0b1db90fe81df, content: 'test 3', __v: 0 } ],
  _id: 5c979d9dedc0b1db90fe81e0,
  name: 'test',
  __v: 0 }