目前,我使用MongoVUE从当前的SQL Server数据库导入,但所有带有uniqueidentifier
的PK都被转换为类似" Binary - 3:UuidLegacy
我的问题是如何在Mongoose上为这个结构创建模式?我无法在Mongoose docs http://mongoosejs.com/docs/api.html#schema_Schema.Types
上看到Guid / UUID数据类型而且更多的是,当使用ValidationID查询
时,我遇到了问题db.Validations.find({ValidationID: '1389AB5E-56BD-46FD-9A8A-258C7BDE4251'});
虽然此Guid与SQL Server记录完全相同,但它不返回任何内容。
感谢。
答案 0 :(得分:0)
MongoVUE在这里掩盖了一些东西,但是以一种很好的方式使它更容易阅读。以下是ValidationID
'1389AB5E-56BD-46FD-9A8A-258C7BDE4251'
实际上看起来的例子 - type 3 BinData
:
{"ValidationID" : BinData(3,"E4mrXla9Rv2aiiWMe95CUQ==")}
观众正在将其转换为更易读的格式。它通过转换为十六进制并添加破折号来做到这一点。证明:
> var bar = BinData(3,"E4mrXla9Rv2aiiWMe95CUQ==")
> bar.hex()
1389ab5e56bd46fd9a8a258c7bde4251
如果要查找该ID,请删除破折号并将其传递到find中,如下所示(我插入了示例文档):
> db.foo.find({ValidationID: UUID('1389AB5E56BD46FD9A8A258C7BDE4251')})
{ "_id" : ObjectId("544fd7ddbb4f50c77c61f367"), "ValidationID" : BinData(3,"E4mrXla9Rv2aiiWMe95CUQ==") }
我没有设置mongoose进行测试,但是在javascript
转换方面已完成了another answer similar to this的腿部工作。
答案 1 :(得分:0)
这让我疯狂了几个小时,作为解决方案,我最终不得不安装
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
})