在嵌套字段上使用猫鼬$operators |$eq



我想查询数据库并返回一组文档,其中选定的嵌套字段等于true 。举个人为的例子:假设我有Facebook用户,他们的数据以这种格式存储。

const UserSchema = new Schema({
  name: String, 
  age: Number, 
  permissions: {
    allow_comments: Boolean, 
    allow_likes: Boolean,
    allow_shares: Boolean
  }
})

我想返回所有已permissions.allow_likes设置为 true 的用户。请注意,它不是一个完整的子文档,它只是一个包含一些数据的对象(也许这很糟糕,idk(。

我环顾四周,没有找到什么。然后,我尝试了这个:

UserModel.find({permissions: {allow_likes: {$eq: true}}})
  .then(users => console.log(users));   // returns []; 

提前感谢!

我不知道

你是如何使用模式和模型的,但我认为你做得不对。对于这种情况,我会使用一个单独的文件来存储用户模式,如下所示(/schemas/user.js(:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
   name: String, 
   age: Number, 
   permissions: {
       allow_comments: Boolean, 
       allow_likes: Boolean,
       allow_shares: Boolean
});
module.exports= mongoose.model('User',userSchema);

之后,要使用它,您可以执行以下操作:

var userModel = require('../schemas/user.js')
var mongoose = require('mongoose');
userModel.find(
   {
       permissions: {allow_likes: true}
   },(err,results) => {
      if (err) {
      //well you got an error
      }
      if (results)
      {
          console.log("Results: "+results);
      }
   }
);