gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:37:06 24 4
gpt4 key购买 nike

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

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

var file = artifactConn.model('Files', fileSchema, 'info');

然后我使用上面的模型来查询然后像这样填充:

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: [] }
}

如果我在 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" } ] } }

我调用 populate 是不是做错了什么?这是我设置架构的方式吗?这是数据存储的方式吗?

最佳答案

您的架构不正确。您拥有的架构将匹配这样的集合:

{ "_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' }
}]
} });

这应该有效。

关于node.js - 是否可以在 mongoosejs 模式中填充自引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16028942/

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