Meteor и GroundDB: поиск по идентификатору, не возвращающий никаких записей
Я пытаюсь реализовать автономную БД для своего приложения Meteor и решил использовать "GroundDB". Сейчас я все еще нахожусь на начальной стадии обучения, но у меня есть проблема, для которой я не могу найти решение:
при использовании.find в моих оффлайн-коллекциях я не могу найти по идентификатору. Все остальные свойства работают. Типичный объект из моей базы данных mongo будет выглядеть так:
{_id:"…someid", name:“test”, description:“test”, systemId:"…someID"};
Я могу найти по имени, описанию и даже по идентификатору системы, но поиск по _id всегда дает 0 результатов.
Что могло вызвать такое поведение?
Это только для GroundDB. Поиск по _id в базе данных mongo работает. Также есть поле "_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 ответ
Итак, я нашел решение, не уверен, что оно самое элегантное. Похоже, GroundDB активно ищет поле _id и пытается использовать его в качестве селектора. Я не уверен, что именно не работает, я думаю, это как-то связано с моим _id-полем, являющимся строкой.
Однако следующие работы:
вместо простого ExampleCol_GROUND.find({_id:"..."})
Теперь я использую оператор "где":
ExampleCol_GROUND.find({$where: function() {
return this._id == "..someId.."
}});