Какой тип GUID на Mongoose
В настоящее время я использовал MongoVUE для импорта из текущей базы данных SQL Server, но все ПК с uniqueidentifier
были преобразованы во что-то вроде "Binary - 3:UuidLegacy"
Мой вопрос: как создать схему для этой структуры в Mongoose? Я не вижу тип данных Guid/UUID в документах Mongoose http://mongoosejs.com/docs/api.html
И еще, я получаю проблему, когда запрос с ValidationID что-то вроде
db.Validations.find({ValidationID: '1389AB5E-56BD-46FD-9A8A-258C7BDE4251'});
Он ничего не возвращает, хотя этот Guid в точности совпадает с записью SQL Server.
Благодарю.
2 ответа
Это сводило меня с ума в течение нескольких часов, так как решение, которое я в конечном итоге пришлось установить
npm install mongodb --save
npm install slugid --save
и закодируйте это следующим образом
var mongo = require('mongodb');
var slugid = require('slugid');
...
var guidb64 = slugid.encode(guid); // guid is something like '8440d561-1127-4fd8-aca9-54de19465d0b'
guidb64 = guidb64.replace(/_/g, '/'); // for whatever reason slug uses '_' instead of '/' I have in db
guidb64 += '=='; // adding missing trailing '==' I have in db
var GUID = new mongo.Binary(new Buffer(guidb64, 'base64'), 3);
var query = MySchemaType.findOne({ Guid: GUID });
query.exec(function(err, entity) {
// process
})
MongoVUE немного запутывает здесь, но приятным способом, который облегчает чтение. Вот каков твой пример ValidationID
из '1389AB5E-56BD-46FD-9A8A-258C7BDE4251'
на самом деле выглядит - это type 3 BinData
:
{"ValidationID" : BinData(3,"E4mrXla9Rv2aiiWMe95CUQ==")}
Зритель преобразует это в более читаемый формат для вас. Это делается путем преобразования в гекс и добавления тире. Для доказательства:
> var bar = BinData(3,"E4mrXla9Rv2aiiWMe95CUQ==")
> bar.hex()
1389ab5e56bd46fd9a8a258c7bde4251
Если вы хотите найти этот идентификатор, то удалите дефисы и передайте их в поиск следующим образом (я вставил образец документа):
> db.foo.find({ValidationID: UUID('1389AB5E56BD46FD9A8A258C7BDE4251')})
{ "_id" : ObjectId("544fd7ddbb4f50c77c61f367"), "ValidationID" : BinData(3,"E4mrXla9Rv2aiiWMe95CUQ==") }
У меня нет настроенного мангуста для тестирования, но я проделал работу для ног в другом ответе, похожем на это с точки зрения конвертации в javascript
,