2016-05-06 5 views
0

Я вставленной коллекцией в MongoDB с помощью сценария Python. Типичный документ выглядит следующим образом:Метеор документ ID визуализируются с мусорными символами

{  _id: { _str: '571eae67ab2c0d18c8509d0f' }, 
    something: '6.10', 
     area: '1805.80'} 

В сценарии Python, идентификатор не был установлен явно, это _id что сгенерировал MongoDB.

Сейчас этот _id визуализируется в шаблонах так:

571eae67ab2c0d18c8509d0f""{} 

И в URL-адресов, а также. Поэтому, когда я открываю /record/571eae67ab2c0d18c8509d0f""{}, функция findOne запрашивает {_id: '571eae67ab2c0d18c8509d0f""{}'} и ничего не находит.

Что я должен исправить в этой схеме?

Я посмотрел другие вопросы здесь, и попытался это:

= this._id.toHexString 
= _id.toHexString 
= _id._str 

Но это не выводит ничего.

+1

Вы указываете 'idGeneration:«вариант MONGO'' при создании коллекции Монго (в Meteor)? Есть ли сочетание строк и ObjectID '_id's? Если идентификаторы не имеют значения (т. Е. Не имеют ссылок нигде и т. Д.), Рассмотрите их замену на строки. – MasterAM

+0

@MasterAM нет, я этого не сделал. И '_id' такие же в коллекции. Я также пробовал это: ввел оболочку Mongo, получил объект, удалил '_id' и снова ввел его. Новый '_id' был того же типа, с' _str' prop. –

+0

Это потому, что MongoDB автоматически генерирует 'ObjectId'. Вы должны явно указать '_id', чтобы предотвратить это поведение. Если ваш '_id' в этой коллекции всегда будет 'ObjectID', вы можете указать это для Meteor, как я упоминал в предыдущем комментарии. Если вы хотите, чтобы они были строками, вы можете попытаться сделать одноразовое преобразование с помощью Meteor и изменить свою подпрограмму Python для создания идентификаторов строк. – MasterAM

ответ

0

Использование помощника и отладка вывода я узнал, что _id не содержит какое-либо объекты идентификатора, но строку. Проблема заключалась в EasySearch, который выравнивает _id в своих целях.

Вот описание: https://github.com/matteodem/meteor-easy-search/issues/347#issuecomment-152793656

У меня возникла проблема, когда поисковый запрос добавляется закончить все идентификаторы. Когда нет ничего в поле ввода, это только добавляет пустой «» в конце идентификатора

enter image description here

И если есть какой-либо вход, он получает вставляется в кавычках.

enter image description here

Ответ:

Столкнулся тот же "вопрос" вчера, оказывается, вы должны использовать _originalId как док говорит:

EasySearch возвращает документы, когда используя поиск, который имеет те же поля, что и исходные, но _id отличается. Если вы хотите выполнить изменения в документах результатов поиска по идентификатору, вы можете использовать __originalId, который содержит исходный _id документа. Поэтому collection.findOne (doc._id) не будет работать, а collection.findOne (doc .__ originalId). поиска, добавлена ​​_id, вероятно, используется внутри этого пакета