2014-10-28 114 views
0

目前什么类型的GUID的,我用MongoVUE从当前的SQL Server数据库中导入但uniqueidentifier所有PK转化为类似“二进制 - 3:UuidLegacy对猫鼬

enter image description here

我的问题是如何做的是对猫鼬这种结构创建模式?我不能看到猫鼬文档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

MongoVUE在这里模糊了一些东西,但以一种很好的方式使它更易于阅读。这里就是你的榜样的'1389AB5E-56BD-46FD-9A8A-258C7BDE4251'ValidationID实际上看起来像 - 这是type 3 BinData

{"ValidationID" : BinData(3,"E4mrXla9Rv2aiiWMe95CUQ==")} 

观众被转换,要为你一个更可读的格式。这是通过转换为十六进制并添加破折号来实现的。为了证明这一点:

> var bar = BinData(3,"E4mrXla9Rv2aiiWMe95CUQ==") 
> bar.hex() 
1389ab5e56bd46fd9a8a258c7bde4251 

如果你想找到ID,然后剥去破折号和传递到发现如下(我插一个样本DOC):

> db.foo.find({ValidationID: UUID('1389AB5E56BD46FD9A8A258C7BDE4251')}) 
{ "_id" : ObjectId("544fd7ddbb4f50c77c61f367"), "ValidationID" : BinData(3,"E4mrXla9Rv2aiiWMe95CUQ==") } 

我没有猫鼬设置测试,但在another answer similar to this做了腿部工作在javascript转换的条款。

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 
 
    })