Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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
Node.js 是否可以在mongoosejs模式中填充自引用?_Node.js_Mongodb_Schema_Mongoose - Fatal编程技术网

Node.js 是否可以在mongoosejs模式中填充自引用?

Node.js 是否可以在mongoosejs模式中填充自引用?,node.js,mongodb,schema,mongoose,Node.js,Mongodb,Schema,Mongoose,我有一个mongoose模型模式,我正试图为一些先前存在的mongodb文档构建它。现有mongo文档具有对同一集合的自引用。我尝试创建一个表示这种关系的模式,然后尝试使用。架构如下所示(为了简洁起见,删除了一些属性): 然后,我使用上述模型进行查询,然后按如下方式填充: models.file.findById("91320684-9a1a-4f2a-a03f-63a7a208ec9b") .populate('pcap.files') // have also tried just 'fil

我有一个mongoose模型模式,我正试图为一些先前存在的mongodb文档构建它。现有mongo文档具有对同一集合的自引用。我尝试创建一个表示这种关系的模式,然后尝试使用。架构如下所示(为了简洁起见,删除了一些属性):

然后,我使用上述模型进行查询,然后按如下方式填充:

models.file.findById("91320684-9a1a-4f2a-a03f-63a7a208ec9b")
.populate('pcap.files') // have also tried just 'files' w/ the same result
.exec(function (err, file) {
    if (!err) {
        console.log(file);
    } else {
        console.log(err);
    }
});
{ "_id" : "91320684-9a1a-4f2a-a03f-63a7a208ec9b",
  "pcap" : {
    "files" : [ 
      { ObjectId("e4eed129-b4aa-46fc-8df2-3f3f92e6fe53") }, 
      { ObjectId("8c0ecb98-452e-475d-a521-feba5c3d1426") }, 
      { ObjectId("4b87c467-f396-4bcf-a7b0-8419e8441ec0") } ] } }
这就导致了

{ _id: '91320684-9a1a-4f2a-a03f-63a7a208ec9b',
  pcap: 
   { files: [] }
}
如果我在mongohub查看我的文档,它看起来是这样的

{ "_id" : "91320684-9a1a-4f2a-a03f-63a7a208ec9b",
  "pcap" : {
    "files" : [ 
      { "_id" : "e4eed129-b4aa-46fc-8df2-3f3f92e6fe53" }, 
      { "_id" : "8c0ecb98-452e-475d-a521-feba5c3d1426" }, 
      { "_id" : "4b87c467-f396-4bcf-a7b0-8419e8441ec0" } ] } }

我的呼叫是否有问题?这是我进行模式设置的方式吗?这是存储数据的方式吗?

您的模式不正确。您拥有的架构将与以下集合相匹配:

models.file.findById("91320684-9a1a-4f2a-a03f-63a7a208ec9b")
.populate('pcap.files') // have also tried just 'files' w/ the same result
.exec(function (err, file) {
    if (!err) {
        console.log(file);
    } else {
        console.log(err);
    }
});
{ "_id" : "91320684-9a1a-4f2a-a03f-63a7a208ec9b",
  "pcap" : {
    "files" : [ 
      { ObjectId("e4eed129-b4aa-46fc-8df2-3f3f92e6fe53") }, 
      { ObjectId("8c0ecb98-452e-475d-a521-feba5c3d1426") }, 
      { ObjectId("4b87c467-f396-4bcf-a7b0-8419e8441ec0") } ] } }
模式应为:

var fileSchema = new Schema({
    _id: { type: String },
    pcap: {
        files: [{ 
            _id: { type: String, ref: 'Files' }
        }]
    } });

这应该是可行的。

模式看起来不错。以同样的方式存储数据,你应该做得很好:例如

{ "_id" : "91320684-9a1a-4f2a-a03f63a7a208ec9b",
  "pcap" : {
  "files" : [ ObjectId("e4eed129-b4aa-46fc-8df2-3f3f92e6fe53"), ObjectId("8c0ecb98-452e-475d-a521-feba5c3d1426"), ObjectId("4b87c467-f396-4bcf-a7b0-8419e8441ec0")] 
  } 
}
然后


它不再是一个空集,而是
文件:[未定义,未定义,未定义]
。它现在至少在阅读参考文献,但没有填充它们。还有其他想法吗?您还需要将populate调用更新为:populate('pcap.files.\u id')不幸的是
.populate('files')
.populate('pcap.files.\u id')
,具有相同的效果,我仍然会得到
文件:[未定义,未定义,未定义]
。但是,
.populate('pcap.files')
抛出一个错误
TypeError:无法读取未定义的属性'ref'。你知道我遗漏了什么吗?所以你基本上是对的。我只是稍微调整了一下你的答案,用String代替ObjectId。非常感谢。