2016-09-20 60 views
0

我有一個MEAN堆棧應用程序。_id從ObjectId轉換爲MEAN應用程序中的字符串

在我的數據庫,文檔具有一個蒙戈的ObjectId像這樣:

{ "_id" : ObjectId("57e15b1009cb82cafafafd73"), "name" : "Hello", "artist_id" : "world", "year" : "2000" } 

但是,當我在前端加載文件時,_id被轉換爲字符串,我的目標是這樣的,當登錄瀏覽器:

{ "_id" : "57e15b1009cb82cafafafd73", "name" : "Hello", "artist_id" : "world", "year" : "2000" } 

什麼是惱人的是,當我想從我的前端修改我的數據庫(更新或刪除現有的文件),我必須將_id從字符串轉換成的ObjectId以將文檔定位到我的數據庫中... 所以在我節點應用,我有系統地按摩_id與new ObjectId(stringId)因爲標識的瀏覽器發送的都是字符串...

Obvisouly我錯過了什麼。 我該如何讓事情更優雅?

+0

'new ObjectId(stringId)'沒有什麼錯。由於JavaScript中沒有* ObjectId *類型,所以您需要使用mongo的ObjectId方法將其轉換爲一個。 – Molda

+0

'ObjectId'在JSON中不是受支持的類型,因此(必要的)轉換爲'String'。 – robertklep

+0

這是正常的,如@Molda所提到的,我使用spring-data mongo驅動程序,並將我的類id映射爲String,因爲在java中沒有ObjectId數據類型,驅動程序執行大部分工作,仍然很煩人地寫'new ObjectId (id)'當我們查詢時。也許司機並不像我們希望的那樣成熟。 –

回答

0

你用mongodb的模塊,我覺得貓鼬? 如果您使用的是貓鼬,那麼您不必將_id轉換爲ObjectId,只需使用字符串運行查詢即可。

db.collection.find({_id: "57e15b1009cb82cafafafd73"}); 
+0

我正在使用mongodb不是貓鼬。 – Lev

+0

你用什麼來連接節點應用中的mongodb? –

+0

let mongo = require('mongodb'); – Lev

1

這是正常使用的ObjectId()將字符串轉換爲對象ID,因爲當你將它傳遞給網絡它轉換爲JSON字符串,所以它不是一個對象ID了,但是當您使用從一個文檔在OBJECTID你的服務器端在這種情況下,你不需要將其轉換爲objectid。

如果您的_id類型是字符串,您總是需要objectId()構造函數。

0

感謝您的回覆。

因此,在MEAN應用程序中即將發生的一件顯而易見的事情是文檔的ObjectIds將被轉換爲字符串,因爲它們被當作JSON對象使用。 這將需要大量使用new ObjectId()當記錄對象的前端有Mongo生成的ID返回到數據庫...

除了使用Mongoose之外的其他選項?我很高興現在使用標準節點mongo驅動程序,除了這個字符串轉換問題之外...

相關問題