Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Mongodb+;猫鼬_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 在Mongodb+;猫鼬

Javascript 在Mongodb+;猫鼬,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,如何在Mongoose.js+MongoDB中执行此查询 我有一个简单的模式,其中评级按用户id存储,以避免重复。对于给定对象的读写,这很好。但我如何查询MongoDB中特定查看器对其进行评级的所有项目呢 例如,这在MongoDB shell中可以很好地工作: db.items.find({ratings.52126672b9f5bd670b000001: {$exists: true}}) 但是我想在Node.js+Mongoose.js中以编程方式查询这个问题,就像这样 var user_

如何在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\u 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"
      }
   }
}
发送到Item.find的对象中的键必须是字符串。要构造任意值的字符串,必须首先创建对象,然后使用括号符号定义它(即:
query[anything+here]=data

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