Node.js mongoose:插入子文档而不是数组
我正在努力将一个文档插入另一个文档中。我已经看过了所有这样的条目,但它们不是我想要的 以下是场景: 我有一个公共文档,它有自己的模式。让我们称之为相关记录:Node.js mongoose:插入子文档而不是数组,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在努力将一个文档插入另一个文档中。我已经看过了所有这样的条目,但它们不是我想要的 以下是场景: 我有一个公共文档,它有自己的模式。让我们称之为相关记录: (function(){ 'use strict'; var mongoose = require('mongoose'); var Schema = mongoose.Schema; var relatedRecordSchema = new Schema({ params: {
(function(){
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var relatedRecordSchema = new Schema({
params: {
recordId: Schema.Types.ObjectId,
recordType: String,
recordTitle: String
},
metadata: {
dateCreated: {type: Date, default: Date.now}
}
},{ _id : false });
mongoose.model('RelatedRecord', relatedRecordSchema);
})();
我在需要它的文档中的数组中插入它没有问题。即其配置方式如下:
//Embedded
relationships: {
following: [mongoose.model('RelatedRecord').schema],
followers: [mongoose.model('RelatedRecord').schema],
blocked: [mongoose.model('RelatedRecord').schema]
}
这很好用
不起作用的场景是存在单个相关记录,比如通知源:
var notificationSchema = new Schema({
params: {
title: String,
imageUrl: String,
source: mongoose.model('RelatedRecord').schema
},
metadata: {
dateCreated: { type: Date, default: Date.now },
dateViewed: Date
}
});
因此,当我创建通知时,我会尝试分配先前准备好的RelatedRecord
returnObj.params.source = relatedRecord;
该记录在要插入的调试过程中出现(它位于_docs分支内,但比我预期的要深得多),但当对象被保存(returnObj.save())时,保存例程会毫无错误地放弃,这意味着它根本不会进入回调
所以在我看来,我把mongoose弄糊涂了,因为点赋值迫使子文档进入错误的位置
所以问题很简单:
如何设置该子文档
问题不是什么:
不,我不想就如何以不同的方式解决这个问题提供建议。我们有合理的理由按照我们现在的方式做事
干杯
正如海伦S正确指出的那样: 1) 子文档=数组,始终如此。它位于文档的第一行:| 2) 通过将类型设置为mixed,对象的赋值工作正常
我是个傻瓜。在另一个模式中使用模式时,必须使用数组。相反,您可以使用Mixed-Type:source:{Type:Schema.Types.Mixed}我知道;)哈,不,真的,当我读到你的评论时,我记得我被搞糊涂了,子文档实际上暗示了一个数组……唉,我是个傻瓜。谢谢@HirenS.)