簡體   English   中英

貓鼬在文檔對象中查找

[英]mongoose find in document object

可以說我有一個貓鼬模式,例如:

mongoose.Schema({
website_id:mongoose.SchemaTypes.ObjectId,
data:Object
})

其中數據字段包含 JSON 對象。 就像是:

{
   "actions":[
      {
         "action":"pageChange",
         "url":"http://localhost:3000/login",
         "dom":"",
         "timestamp":1653341614846
      },
      {
         "action":"pageChange",
         "url":"http://localhost:3000/signup",
         "dom":"",
         "timestamp":1653341626442
      },
      {
         "action":"pageChange",
         "url":"http://localhost:3000/view",
         "dom":"",
         "timestamp":1653341626442
      },
      {
         "action":"pageChange",
         "url":"http://localhost:3000/login",
         "dom":"",
         "timestamp":1653341626442
      }
   ]
}

有什么方法可以獲取所有文檔,其中數據字段對象包含http://localhost:3000/login作為 url,而無需先獲取所有文檔並循環它們。

對象將是動態生成的,並且項目將自我重復

當然,有幾種方法,在這種情況下,最好的方法之一是使用“聚合”

 db.collection.aggregate([
   {$unwind: "$actions"},
   { $match: {"actions.url": "http://localhost:3000/login"}},
   {$group: {
     _id: "$_id",
     actions: {$push: "$actions"}
     }
   }
 ])

返回響應:

{
 "actions": [
   {
    "action": "pageChange",
    "dom": "",
    "timestamp": 1.653341614846e+12,
    "url": "http://localhost:3000/login"
    },
    {
    "action": "pageChange",
    "dom": "",
    "timestamp": 1.653341626442e+12,
    "url": "http://localhost:3000/login"
   }
  ]
 }

如果我找到其他或更好的方法,我一定會分享.. 我希望這個解決方案可以幫助你。

你當然可以這樣做。 您可以在查詢中以字符串的形式指定對象嵌套。

await MyModel.find({ 'data.objectKey.items.item': 'text I want to find' }).exec();

暫無
暫無

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

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