Вставка Meteor SimpleSchema с вложенным объектом

У меня есть следующая коллекция, в которой есть вложенный объект address, определенный с помощью пакета Collection2 Meteor. Я не могу вставить данные для этого вложенного объекта...

Пример данных

var addresses = [{
    "venue": "Kirkstall Abbey",
    "street": "Kirkstall Lane",
    "city": "Leeds",
    "county": "West Yorkshire",
    "postcode": "LS6 3LF"
},{ 
    "venue": "Headingley High School",
    "street": "",
    "city": "Leeds",
    "county": "West Yorkshire",
    "postcode": "LS6 7QR"
}];


var locations = [{
    "name": "Kirkstall Abbey",
    "address": addresses[0],
    "image": null,
    "active": true
},{
    "name": "Headingley",
    "address": addresses[1],
    "image": null,
    "active": true
}];

Определение коллекции

ClassLocation = new Mongo.Collection("class-location");

Schemas.ClassLocation = new SimpleSchema({
    name: {
      type: String,
      optional: true
    },
    address: {
      type: Object
    },
    image: {
      type: String,
      optional: true
    }
    active: {
      type: Boolean,
      optional: true
    }
});

ClassLocation.attachSchema(Schemas.ClassLocation);

Обычные

if(ClassLocation.find().count() === 0) {
  _.each(locations, function (location) {
    console.log(location.address);
    ClassLocation.insert(location);
  });
}

Проблема

Консоль выводит объект сведений об адресе местоположения в порядке, но моя коллекция вставленных документов MongoDb пуста для адреса? Я пробовал множество вещей, в том числе выполнял обновление после первоначальной вставки (что далеко от идеала).

Может ли кто-нибудь объяснить, почему этот вложенный объект не вставляется и что требуется для его исправления?

Спасибо


person Matt D. Webb    schedule 06.11.2015    source источник


Ответы (1)


Используйте пакет publish-counts, чтобы подписаться на счетчик в метеоре:

// server: publish the current size of a collection
Meteor.publish('getLocationCounts', function() {
    Counts.publish(this, 'locations-counter', ClassLocation.find());
});

После того, как вы подписались на getLocationCounts, вы можете вызвать Counts.get('locations-counter'), чтобы реактивно получить значение счетчика.

Эта функция всегда будет возвращать целое число, 0 возвращается, если счетчик не опубликован и не подписан.

// client: get the count value reactively
var exists = (Counts.get('locations-counter')=== 0);
if(exists) {
    _.each(locations, function (location) {
        console.log(location.address);
        ClassLocation.insert(location);
    });
}
person chridam    schedule 06.11.2015
comment
@chridam... как вы так хорошо разбираетесь в MongoDB? Я пытаюсь расти. Я хотел бы задать вам несколько вопросов, в чате или что-то в этом роде. - person Abdullah Rasheed; 06.11.2015
comment
@inspired В основном читаю основную документацию MongoDB, блоги, JIRA, github и, конечно же, растущие онлайн-курсы Университета MongoDB. Напишите мне на Gmail с тем же дескриптором. - person chridam; 06.11.2015
comment
@chridam проблема не в find().count(), проблема в том, что вставленное поле адреса местоположения имеет значение null (0 полей). - person Matt D. Webb; 06.11.2015
comment
Я считаю, что проблема не во вставке, а в том, как вы используете find().count(), который реагирует на вставку. - person chridam; 06.11.2015
comment
@chridam Я отправил тебе сообщение Gmail. Спасибо. - person Abdullah Rasheed; 06.11.2015
comment
@chridam спасибо, но я попробовал именно то, что вы предложили здесь, и адрес все еще не заполнен. Есть ли что-нибудь еще, что вы можете предложить? - person Matt D. Webb; 10.11.2015
comment
@chridam также, что интересно, флаг «существует» всегда остается истинным, даже после того, как я вижу, что некоторые документы были вставлены. :-/ - person Matt D. Webb; 10.11.2015
comment
@MattWebb Я мог бы предложить реализовать реактивный подсчет, такой как метеор docs подсчет по комнатам пример. - person chridam; 10.11.2015