>

와이즈 비즈 만 갖고 싶습니다  MongoDB에 컬렉션이 있지만 versioneditems 를 모두 등록해야합니다.  모델과 VersionedItem   ItemPatch 를 만들어야하기 때문에 모델 ItemPatch 를 채우기 위해 es .

별도의 VersionedItem 는 없습니다  문서 ( ItemPatch 에 포함되어 있음) ). MongoDB에서 추가 컬렉션이 생성된다는 사실을 제외하고 아래 코드는 작동합니다.

src/models/versionedItemFactory.js

VersionedItem

src/models/itemPatchFactory.js

const VersionedItemSchema = require('../schemas/VersionedItem');
module.exports = (db) => {
  var VersionedItemModel = db.model('VersionedItem', VersionedItemSchema);
  return VersionedItemModel;
};

src/schemas/util/asPatch.js

const ItemPatchSchema = require('../schemas/ItemPatch');
module.exports = (db) => {
  var ItemPatchModel = db.model('ItemPatch', ItemPatchSchema);
  return ItemPatchModel;
};

src/schemas/Item.js

var mongoose = require('mongoose');
module.exports = function _asPatch(schema) {
  return new mongoose.Schema({
    createdAt: { type: Date, default: Date.now },
    jsonPatch: {
      op: { type: String, default: 'add' },
      path: { type: String, default: '' },
      value: { type: schema }
    }
  });
};

src/schemas/ItemPatch.js

var mongoose = require('mongoose');
module.exports = new mongoose.Schema({
  title: { type: String, index: true },
  content: { type: String },
  type: { type: String, default: 'txt' }
}, { _id: false });

src/schemas/VersionedItem.js

var asPatch = require('./util/asPatch');
var ItemSchema = require('./Item');
module.exports = asPatch(ItemSchema);

그런 다음 등록 :

var mongoose = require('mongoose');
var ItemPatchSchema = require('./ItemPatch');
module.exports = new mongoose.Schema({
  createdAt: { type: Date, default: Date.now },
  patches: [
    {
      createdAt: { type: Date, default: Date.now },
      jsonPatch: { type: ItemPatchSchema }
    }
  ]
});

<시간>

db.once('open', function() { require('./models/itemPatchFactory')(db); require('./models/versionedItemFactory')(db); }); 를 등록해야합니다   ItemPatch 를 통한 모델  버전이 지정된 항목을 다음과 같이 채울 수 있기를 원합니다.

itemPatchFactory

이것은 2 개의 패치로 버전이 지정된 아이템을 성공적으로 생성하지만 (빈) var itemPatch = new db.models.ItemPatch({ jsonPatch: { op: 'add', path: '', value: { title: 'This is a title', content: 'This is content', type: 'txt' } } }); var itemPatch2 = new db.models.ItemPatch({ jsonPatch: { value: { title: 'This is a title 2', content: 'This is content 2' } } }); var versionedSomething = new db.models.VersionedItem(); versionedSomething.patches.push(itemPatch); versionedSomething.patches.push(itemPatch2); versionedSomething.save(function (err, result) { if (err) throw err; console.log('result:', result); });  컬렉션은 MongoDB에서 생성되며이를 피하고 싶습니다.

itempatches

  • 답변 # 1

    Model 를 만들 수 없습니다  해당 컬렉션이 없지만 실제로 원하는 것을 수행하기 위해 필요한 것은 아니라고 생각합니다.

    자식을위한 자바 스크립트 객체를 만들어서 부모 컬렉션으로 푸시하면됩니다. 몽구스 문서 (https://mongoosejs.com/docs/subdocs.html)에서이 스 니펫을 참조하십시오.

    var Parent = mongoose.model('Parent');
    var parent = new Parent;
    // create a comment
    parent.children.push({ name: 'Liesl' });
    var subdoc = parent.children[0];
    console.log(subdoc) // { _id: '501d86090d371bab2c0341c5', name: 'Liesl' }
    subdoc.isNew; // true
    parent.save(function (err) {
      if (err) return handleError(err)
      console.log('Success!');
    });
    
    

    Schema 를 만들 수 있습니다  그러나 하위 문서의 경우 그러면부모컬렉션에서 읽거나 쓸 때 구조를 적용 할 수 있습니다.

    var childSchema = new Schema({ name: 'string' });
    var parentSchema = new Schema({
      // Array of subdocuments
      children: [childSchema],
      // Single nested subdocuments. Caveat: single nested subdocs only work
      // in mongoose >= 4.2.0
      child: childSchema
    });
    
    

관련 자료

  • 이전 mysql - Docker Volumes 생성, 채우기 및 사용
  • 다음 Azure SQL Data Warehouse의 팩트 테이블 디자인