将不同集合的文档存储在同一阵列中

蒋志强(Derek Chiang)

在猫鼬中,您可以执行以下操作:

var questionSchema = new Schema({
  comments: [{type: ObjectId, ref: 'Comment'}]
})

然后您可以填充它。

但是,有没有一种方法可以将不同集合的文档存储在同一数组中?就像是:

var questionSchema = new Schema({
  commentsAndAnswers: [{type: ObjectId, ref: 'Comment'}, {type: ObjectId, ref: 'Answer'}]
})

显然这是行不通的,但是您明白我的意思了。

谢谢!

列昂尼德·贝斯卡斯特尼

我可以为您的问题提出三种解决方案。

第一种解决方案是将ObjectID不带refs的s存储到另一个集合中:

var questionSchema = new Schema({
  comments: [ObjectId]
})

它将正常工作,但是您需要为每个查询指定要填充的模型

Question.findOne().populate('comments', Answer).exec(next)

但是我不确定您是否可以同时comments使用CommentAnswer模型进行填充

另一种解决方案comments使用refs作为对象存储

var questionSchema = new Schema({
  comments: [{
      comment: {type: ObjectId, ref: 'Comment'}
      answer: {type: ObjectId, ref: 'Answer'}
    }]
})

现在,您可以在单个查询中填充评论和答案:

Question.findOne().populate('comments.comment comments.answer').exec(next)

如果要在单个数组中查看它们,可以添加一个virtual

questionSchema.virtual('comments_and_answers').get(function () {
  return this.comments.map(function (c) {
    return c.comment || c.answer
  });
})

您可以使用toObject传递函数摆脱原始数组

最后,您可以重新设计架构,以使用相同的猫鼬模型将评论和答案存储在单个集合中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

斯威夫特:同一阵列中的不同对象?

MongoDb更新同一阵列中的多个特定嵌入式文档

来自同一阵列的两个不同输出

同一阵列的两个不同输出

合并同一阵列中的通用键数据

如何将 MongoDB-atlas 集合中的特定文档与存储在同一集群中不同集合中的文档相关联?

在一个DocumentDb集合中存储不同的文档类型

如何将对象推入同一阵列?

加入同一阵列下的文件夹文件

如何将同一阵列分组

如何在同一阵列中两个元素结合在一起?

多个复选框,使用Vue.js 2.0中的动态作弊数据绑定到同一阵列

在C#中将不同类型存储在集合中

如何从mongodb中的同一集合查询大于不同文档中的值?

MongoDb聚合框架,连接不同文档位于同一集合中

将不同的数据类型存储在C中的同一已分配内存中可以吗?

两个异步任务可以同时访问同一阵列吗?

将不同的值分组在同一列中

如何比较同一集合中的文档?

交叉引用对象与另一阵列

将不同的文件夹保留在同一存储库下

将不同的微服务连接到同一个云数据存储

如何在同一集合中获取具有不同结构的 mongo 文档并根据公共字段匹配它们并返回自定义文档

在同一索引中合并不同文档的字段

同一文档中的不同内容

Android-Firebase Firestore-将同一文档写入不同的集合

如何在mongodb中将一个文档保存到同一数据库的两个不同集合中

同一集合中的$ lookup是嵌套文档,而不是返回所有文档

将不同的项目均匀地放置在阵列中