MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

С mongodb и ръководства за идентификатор на документи какъв е ефикасен начин за съхраняване на ръководствата, за да извлечете лесно действителното ръководство?

Работата с GUID има няколко клопки, свързани най-вече с това как да работите с двоичното представяне в mongo shell, а също и с исторически инциденти, които доведоха до различни драйвери, съхраняващи GUID, използвайки различни редове на байтове.

Използвах следния код, за да илюстрирам проблемите:

var document = new BsonDocument { { "_id", Guid.NewGuid() }, { "x", 1 } };
collection.Drop();
collection.Insert(document);
Console.WriteLine("Inserted GUID: {0}", document["_id"].AsGuid);

което, когато го стартирах, изведе:

Inserted GUID: 2d25b9c6-6d30-4441-a360-47e7804c62be

когато покажа това в mongo shell, получавам:

> var doc = db.test.findOne()
> doc
{ "_id" : BinData(3,"xrklLTBtQUSjYEfngExivg=="), "x" : 1 }
> doc._id.hex()
c6b9252d306d4144a36047e7804c62be
>

Забележете, че дори когато се показва като шестнадесетичен, редът на байтовете не съвпада с оригиналния GUID. Това е историческият инцидент, за който говорих. Всички байтове са там, просто са в необичаен ред благодарение на внедряването на Guid.ToByteArray() от Microsoft.

За да ви помогнем да работите с GUID в mongo shell, можете да копирате следния файл с помощни функции в директорията, където се съхранява mongo.exe:

https://github.com/rstam/mongo-csharp -driver/blob/master/uuidhelpers.js

Файлът има някои кратки коментари към документацията в горната част, които може да ви бъдат полезни. За да направите тези функции достъпни в mongo shell, трябва да кажете на mongo shell да прочете този файл, когато се стартира. Вижте следната примерна сесия:

C:\mongodb\mongodb-win32-x86_64-2.0.6\bin>mongo --shell uuidhelpers.js
MongoDB shell version: 2.0.6
connecting to: test
type "help" for help
> var doc = db.test.findOne()
> doc
{ "_id" : BinData(3,"xrklLTBtQUSjYEfngExivg=="), "x" : 1 }
> doc._id.hex()
c6b9252d306d4144a36047e7804c62be
> doc._id.toCSUUID()
CSUUID("2d25b9c6-6d30-4441-a360-47e7804c62be")
>

Можете също така да използвате друга помощна функция за заявка за GUID:

> db.test.find({_id : CSUUID("2d25b9c6-6d30-4441-a360-47e7804c62be")})
{ "_id" : BinData(3,"xrklLTBtQUSjYEfngExivg=="), "x" : 1 }
>

Що се отнася до съхраняването на вашите GUID като низове, това не е нечувано нещо и определено прави преглеждането и запитването на данните в mongo shell по-лесно и избягва всички проблеми с различни редове на байтове. Единственият недостатък е, че използва повече място (приблизително двойно).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Затварянето на гнездото на пощальона не можа да се свърже с Mongodb

  2. MongoDb агрегиране

  3. MongoDB за търговска употреба

  4. как да създадете динамични ключове на документи в mongodb

  5. Грешка по време на mongoimport