Mongoose上的什么类型的GUID

时间:2014-10-28 05:15:10

标签: node.js mongodb mongoose mongovue

目前,我使用MongoVUE从当前的SQL Server数据库导入,但所有带有uniqueidentifier的PK都被转换为类似" Binary - 3:UuidLegacy

enter image description here

我的问题是如何在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记录完全相同,但它不返回任何内容。

感谢。

2 个答案:

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