MongoDb ObjectId ("uniqueid") nodejs'de JSON'a nasıl serileştirilir?

Aug 28 2020

Çağrıldığında mongo db sorgusu çıkaran bir sorgu oluşturucu hizmetimiz B olduğunu varsayalım. Bu sorgu, servis A tarafından alınır ve mongo db official nodejs sürücüsünde olduğu gibi yürütülür.

Şuna benzer bir şeyi nasıl gönderirim:

[{
  _id: new mongo.ObjectID("5f3258cfbaaccedaa5dd2d96"),
  phone: "666"
}, {
  _id: new mongo.ObjectID("5f3258cfbaaccedaa5dd2da2"),
  phone: "555"
}]

B hizmetinden A hizmetine?

DÜZENLE:

Aşağıdakiler gayet iyi çalışıyor:

var q = { _id: new mongo.ObjectID("5f3258cfbaaccedaa5dd2d96") };
const result = await this.db.collection("persons").find(q).toArray();

Aşağıdakiler çalışmıyor:

var q = { _id: { $oid: "5f3258cfbaaccedaa5dd2d96" } }
const result = await this.db.collection("persons").find(q).toArray();

Şimdi,

var q = { _id: new mongo.ObjectID("5f3258cfbaaccedaa5dd2d96") };
JSON.stringify(q)

size şunları verir: {"_id":"5f3258cfbaaccedaa5dd2d96"}ve bunu A hizmetine iletirseniz, bunu aşağıdaki şekilde hizmet A'da kullanamazsınız:

  const result = await this.db.collection("persons").find(qStr).toArray();

Veya şu şekilde,

  const result = await this.db.collection("persons").find(JSON.parse(qStr)).toArray();

Yanıtlar

D.SM Aug 28 2020 at 22:51

Gerek:

  • Belgelerinizi bir uçtan genişletilmiş json'a seri hale getirin
  • Belgelerinizi genişletilmiş json'dan diğer uçtaki dil yerel veri yapılarına kadar serileştirin

Görmek https://github.com/mongodb/js-bson#node-no-bundling nasıl serileştirileceği ve seriden çıkarılacağı hakkında

Yapmaya çalıştığınız gibi, genişletilmiş json türü açıklamalı karmaları, yerel türler bekleyen sürücü işlevlerine (temelde tümü, genişletilmiş json'u özel olarak ayrıştıranlardan farklı) besleyemezsiniz.

var q = { _id: new mongo.ObjectID("5f3258cfbaaccedaa5dd2d96") };
const serializedQ = BSON.serialize(q);
const deserializedQ = BSON.deserialize(serializedQ);    
const result = await this.db.collection("persons").find(deserializedQ).toArray();
Thilo Aug 28 2020 at 19:40

MongoDB'nin normal JSON'da tüm BSON veri türlerini nasıl kodlayabileceğinizi tanımlayan " Genişletilmiş JSON " olarak adlandırdığı bir standart vardır .

Gibi bir şey olacak

{ _id : {$oid: "5f3258cfbaaccedaa5dd2d96"} }

Çoğu MongoDB aracı bu biçime dönüştürebilir.