вставка keystone.js в поля отношений - PullRequest
0 голосов
/ 21 ноября 2018

Мне очень жаль, если это выходит наивно, но я слишком долго этим занимался.Моя проблема связана с этим неотвеченным вопросом.У меня установлена ​​ Keystone 4 , и мне нужно использовать функцию update .Вот модель страны:

'use strict';

const keystone = require('keystone');
const Types = keystone.Field.Types;
/**
 * Country Model
 * ============
 */

let Country = new keystone.List('Country', {
    autokey: { from: 'name', path: 'key', unique: true },
});
Country.add({
    name: { type: Types.Text, initial: true, required: true, unique: true },
    capital: { type: Types.Relationship, ref: 'State' },
});

// Get country's id
Country.schema.methods.getCountryId = function (name, cb) {
        this.model.findOne({ name: name }).select('_id').exec(cb);
    };

Country.register();

метод getCountryId () предназначен для того, чтобы я мог указывать идентификаторы в поле отношения при создании обновлений состояния, с моделью, показанной ниже:

'use strict'
;
const keystone = require('keystone');
const Types = keystone.Field.Types;
/**
 * State Model
 * ============
 */

let State = new keystone.List('State', {
    autokey: { from: 'name', path: 'key', unique: true },
});
State.add({
    name: { type: Types.Text, initial: true, required: true, unique: true },
    capital: { type: Types.Text },
    country: { type: Types.Relationship, initial: false, ref: 'Country', many: false, index: true }
});

// Return only a State's _id
State.statics = {
    getStateId: function (name, cb) {
        this.findOne({ name: name }).select('_id').exec(cb);
    }
};

State.register();

Теперьобновления состояния, для краткости:

'use strict';
const keystone = require('keystone');

let Country = keystone.list('Country');

// Get the _id of France
let france = Country.getCountryId('France', function (err, country) {
if (err) {
    // handle error, express example:
    console.err(err);
}

exports.create = {
    State: [
        { name: 'Nouvelle-Aquitaine', capital: 'Bordeaux', country: france },
        { name: 'Auvergne-Rhône-Alpes', capital: 'Lyon', country: france },
        ],
};

Мой текущий коммит вызывает огромную утечку памяти.Но до этого я продолжал получать Country.getCountryId это не функция.Я также попробовал концепцию Mongoose Populate , которая, кажется, работает только при использовании одной из функций find*.Очевидно, я что-то упустил.Пожалуйста, скажите мне, что это такое.

...