2014-10-28 115 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 
 
    })