簡體   English   中英

按 MongoDB 中的 INC 值查找文檔

[英]Find a document by INC value in MongoDB

從我的網站客戶端,我向后端 Node.js 服務器發送 API 請求,並通過 ID 查找特定文檔,如下所示:

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

db.collection('users').find({"_id": new ObjectID(req.body._id)})

其中req.body._id等於整個 ID 字符串,例如'5d0381ad681a2a3aa1dc5872'

但是我寧願只發送字符串的INC (不斷遞增的值)部分作為參數: 'c5872'

我應該如何僅根據 INC 值查找特定文檔? (我假設 INC 是獨一無二的)

任何幫助是極大的贊賞。

您可以在字符串中臨時轉換您的 _id 以便能夠使用正則表達式:

db.users.aggregate([
  {
    $addFields: { id: { $toString: '$_id' } }
  },
  {
    $match: { id: /c5872$/ }
  }
])

更簡潔的解決方案是直接使用 substring 創建字段,以避免使用正則表達式:

db.users.aggregate([
  {
    $addFields: { id: { $substr: [{ $toString: '$_id' }, 19, 24] } }
  },
  {
    $match: { id: 'c5872' }
  }
])

https://docs.mongodb.com/manual/reference/operator/aggregation/addFields/ https://docs.mongodb.com/manual/reference/operator/aggregation/substr/

您可以創建額外的 ID 字段和唯一索引以確保索引字段不存儲重復值,但請注意,對於五個十六進制字符串,我們有“1,048,576”個可能的組合(16 ^ 5 = 1048576)。

注意:使用正則表達式可能會導致集合掃描。

如果正則表達式以插入符號 (^) 或左錨 (\A) 開頭,后跟一串簡單符號,則它是“前綴表達式”。 例如,正則表達式 /^abc.*/ 將通過僅匹配索引中以 abc 開頭的值進行優化。

正則表達式和索引使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM