Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongojs按uuid查找\u id_Node.js_Mongodb_Mongojs - Fatal编程技术网

Node.js Mongojs按uuid查找\u id

Node.js Mongojs按uuid查找\u id,node.js,mongodb,mongojs,Node.js,Mongodb,Mongojs,我正试图找到一张monogjs的唱片 我们的_id是一个guid.net 所以我有一个类似于80cd95b8-79bf-4025-933b-cabc71fbdc9f的字符串 现在我尝试使用指定uuid子类型的缓冲区monogdb.bsonpure 我尝试将其传递给objectid,但它告诉我它需要是一个十六进制字符串12/24 我只是将其作为字符串传递,但它不会返回任何内容好的,这很有效 将80cd95b8-79bf-4025-933b-cabc71fbdc9f取出- var Binary =

我正试图找到一张monogjs的唱片

我们的_id是一个guid.net

所以我有一个类似于80cd95b8-79bf-4025-933b-cabc71fbdc9f的字符串

现在我尝试使用指定uuid子类型的缓冲区monogdb.bsonpure

我尝试将其传递给objectid,但它告诉我它需要是一个十六进制字符串12/24

我只是将其作为字符串传递,但它不会返回任何内容

好的,这很有效

将80cd95b8-79bf-4025-933b-cabc71fbdc9f取出-

var Binary = require('mongodb').Binary;

var uuid = require('node-uuid');

var base64data = new Buffer(uuid.parse(param), 'binary').toString('base64');

var bin = new Buffer(base64data, 'base64');

var id = new Binary(bin, Binary.SUBTYPE_UUID_OLD);

所以这个被接受的答案对我来说不起作用。我在中找到一段代码,用于将.net guid解析为缓冲区:

guid-parse.js:

'use strict';

// Maps for number <-> hex string conversion
var _byteToHex = [];
var _hexToByte = {};
for (var i = 0; i < 256; i++) {
  _byteToHex[i] = (i + 0x100).toString(16).substr(1);
  _hexToByte[_byteToHex[i]] = i;
}

// **`parse()` - Parse a UUID into it's component bytes**
function parse(s, buf, offset) {
  const i = (buf && offset) || 0;
  offset = i;
  let ii = 0;

  buf = buf || Buffer.alloc(16 + i);
  s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {
    if (ii < 16) { // Don't overflow!
      buf[i + ii++] = _hexToByte[oct];
    }
  });

  // Zero out remaining bytes if string was short
  while (ii < 16) {
    buf[i + ii++] = 0;
  }

  // Endian-swap hack...
  var buf2 = Buffer.from(buf);
  buf[offset+0] = buf2[offset+3];
  buf[offset+1] = buf2[offset+2];
  buf[offset+2] = buf2[offset+1];
  buf[offset+3] = buf2[offset+0];
  buf[offset+4] = buf2[offset+5];
  buf[offset+5] = buf2[offset+4];
  buf[offset+6] = buf2[offset+7];
  buf[offset+7] = buf2[offset+6];

  return buf;
}

// **`unparse()` - Convert UUID byte array (ala parse()) into a string**
function unparse(buf, offset) {
  let i = offset || 0;

  // Endian-swap hack...
  var buf2 = Buffer.from(buf);
  buf[i+0] = buf2[i+3];
  buf[i+1] = buf2[i+2];
  buf[i+2] = buf2[i+1];
  buf[i+3] = buf2[i+0];
  buf[i+4] = buf2[i+5];
  buf[i+5] = buf2[i+4];
  buf[i+6] = buf2[i+7];
  buf[i+7] = buf2[i+6];

  const bth = _byteToHex;
  return  bth[buf[i++]] + bth[buf[i++]] +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] +
          bth[buf[i++]] + bth[buf[i++]] +
          bth[buf[i++]] + bth[buf[i++]];
}

module.exports = {
  parse,
  unparse
};

它还退回了我要找的收藏品

对象id应该是12个字节,guid是16个字节,只是你不能这么做。但该记录是用c端的guid添加的。我如何查询它objectid是一个很长的目标,但我确实看到了它的不同。谢谢id是一个字符串或LUUID?似乎很难像我发布的那样使用js函数
const mc = require('mongodb').MongoClient;
const { Binary } = require('mongodb').Binary
const guidParse = require("./guid-parse.js");

const NUUID = guidString => {
  return new Binary(guidParse.parse(guidString), Binary.SUBTYPE_UUID_OLD);
};

mc.connect('mongodb://localhost:27017/database').then( conn => {
  const db = conn.db('database');
  return db
    .collection('users')
    .find({
      Guid: NUUID("9EC5955B-E443-456A-A520-8A87DED37EBB")
    })
    .toArray();
}).then( users => {
  console.log(users);
});