0

目前,我使用 MongoVUE 从当前 SQL Server 数据库导入,但所有 PKuniqueidentifier都转换为类似“Binary - 3:UuidLegacy

在此处输入图像描述

我的问题是如何在 Mongoose 上为这个结构创建模式?我在 Mongoose 文档http://mongoosejs.com/docs/api.html#schema_Schema.Types上看不到 Guid/UUID 数据类型

更重要的是,当使用 ValidationID 进行查询时,我会遇到问题

db.Validations.find({ValidationID: '1389AB5E-56BD-46FD-9A8A-258C7BDE4251'});

尽管此 Guid 与 SQL Server 记录完全相同,但它什么也不返回。

谢谢。

4

2 回答 2

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

我没有设置猫鼬来测试,但是在转换javascript.

于 2014-10-28T18:00:12.153 回答
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
    })

于 2016-01-05T16:45:59.580 回答