MongoDb ObjectId ("uniqueid") nodejs'de JSON'a nasıl serileştirilir?
Ç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
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();
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.