Meteor и GroundDB: найти по идентификатору, не возвращая никаких записей - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь реализовать автономную базу данных для моего метеорного приложения и выбрал GroundDB . Сейчас я все еще на начальном этапе обучения, но у меня возникла проблема, для которой я не могу найти решение:

при использовании .find в моих автономных коллекциях, Я не могу найти по идентификатору, Любое другое свойство работает. Типичный объект из моей базы данных go будет выглядеть так:

{_id:"…someid", name:“test”, description:“test”, systemId:"…someID"};

Я могу найти по имени, описанию и даже systemID, но поиск по _id всегда возвращает 0 результаты.

Что может вызвать такое поведение?

Это только для GroundDB. Поиск по _id в базе данных mon go работает. Также есть поле «_id» в GroundDB! При выполнении .find({}) без фильтров я вижу, что все свойства, включая поле _id, копируются в groundb.

Редактировать

Мой текущий код относительно GroundDB выглядит следующим образом:

ExampleCol = new Mongo.Collection('exampleCol');


if (Meteor.isServer) {
  Meteor.publish('exampleCol', functionexampleColPublication() {
    return ExampleCol.find();
  });
}

На клиенте:

ExampleCol_GROUND = new Ground.Collection('exampleCol'
  });
ExampleCol_GROUND.observeSource(ExampleCol.find());

А затем: ExampleCol_GROUND.find() возвращает все записи, которые также находятся в ExampleCol. Я просто не могу ExampleCol_GROUND.find({_id:"..."}) (0 результатов)

1 Ответ

0 голосов
/ 26 марта 2020

Так что я нашел решение, не уверен, что оно самое элегантное. GroundDB, похоже, активно ищет поле _id и пытается использовать его в качестве селектора. Я не уверен, что именно не работает, я думаю, это как-то связано с моим _id-полем, являющимся строкой.

Хотя следующие работы:

вместо простого ExampleCol_GROUND.find({_id:"..."})

Я сейчас использую оператор 'где':

ExampleCol_GROUND.find({$where: function() {
                   return this._id ==  "..someId.."
                }});
...