簡體   English   中英

在Mongodb + Mongoose.js中動態查詢嵌套對象

[英]Query nested object dynamically in Mongodb + Mongoose.js

我如何在Mongoose.js + MongoDB中執行此查詢?

我有一個簡單的架構,其中評級由用戶ID存儲,以避免重復。 對於讀取和寫入給定對象,這很好。 但是,我如何向MongoDB查詢特定查看者對其進行評級的所有項目?

例如,這在MongoDB shell中工作正常:

db.items.find({ratings.52126672b9f5bd670b000001: {$exists: true}})

但我想在Node.js + Mongoose.js中以編程方式查詢,如下所示,

var user_id = req.params.id;
Item.find({ ratings.user_id : {$exists: true}}, function(err, items) { ... });

我感到難過的是Mongoose.js對內部對象采用點表示法,但是將user_id解釋為文字,而Mongoose.js不對內部對象采用方括號表示法。

這是一個示例模式;

var ItemSchema = new mongoose.Schema({
   name:  { type: String, required: true },
   ratings: { type: mongoose.Schema.Types.Mixed} 
});

這樣的數據的一個例子:

[ { 
      name: "Toaster", 
      ratings: {
          "52126672b9f5bd670b000001": 1,
          "52155b39a411791c29000001": -1
      }
   }, 
   { 
      name: "Griddle", 
      ratings: {
          "52126672b9f5bd670b000001": 1,
          "52126672b9f5bd670b000001": 1"
      }
   }
}
var user_id = req.params.id;
var query = {};
query['ratings.' + user_id] = {$exists: true};
Item.find(query, function(err, items) { ... });

您發送給Item.find的對象中的鍵必須是一個字符串。 要構造任意值的字符串,您必須首先創建對象,然后使用括號表示法來定義它(即: query[anything+here] = data )。

暫無
暫無

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

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