当前位置: 首页 > 知识库问答 >
问题:

查询对象数组的Mongoose Mongodb

桓高澹
2023-03-14

在使用Mongoose查询数组时,我很难得到我期望看到的内容。一个用户可以有许多与他/她的帐户相关联的房间。room对象存储在集合中附加到用户的数组中。只有一个集合叫做Users。

请考虑以下user和Room的两个架构:

var userSchema = mongoose.Schema({

local            : {
    username     : String,
    email        : String,
    password     : String,
    rooms        : {type:Array, default: []}
}  


});
var roomSchema = mongoose.Schema({

     name: String

});
var User = require('../models/user');

User.find({ 'rooms.name' : req.body.username  }, 
            { rooms: 
                { $elemMatch : 
                   { 
                     name: req.body.username 
                   } 
                } 
            }, function (err, user) {

        if (err){
            return done(err);
        }    

        console.log("user:::", user);

        if (user) {
            console.log("ROOM NAME FOUND");
            req.roomNameAlreadyInUse = true;
            next();

        } else {
            req.roomNameAlreadyInUse = false;
            console.log("ROOM NAME NOT FOUND");
            next();

        }

    });
User.find({local: {rooms: {$elemMatch: {name: req.body.username}}}}, function (err,     user) {

}



User.find({'local.rooms': {$elemMatch: {name: req.body.username}}}, function (err, user) {

}

我还应该指出,数据库是填充的,因为我可以看到RoboMongo中的数组(在创建用户帐户时创建了1个元素)。

正在填充从控制台输出到show database的示例数据(包括user.roames数组):

db.users.find(){“_id”:ObjectId(“533c4db2b2c311a81be8a256”),“本地”:{“密码”:“$2a$08$0yqqj2y0726kztkwy5mapogzhacomzn0fd8dlausiumb xe4zbltxs”,“用户名”:“保罗”,“电子邮件”:“测试”,“房间”:[{“名称”:“保罗”,“id”:ObjectId(“533c4db2b2c311a81be8a57”)}],“状态”:“活动”},“_v”:0}{“_id(”533C4DDAB2C311A81BE8A258“),”本地“:{”密码“:”$2A$08$DC3CBDTKG5OZECDTU/IICO3AZ0WDKZLGH2XDCB8J1CF/FQHE5GUZQ“,”用户名“:”John“,”电子邮件“:”Test2“,”房间“:[{”名称“:”John“,”ID“:ObjectId(”533C4DDAB2C311A81BE8A259“)}],”状态“:”Active“},”_V“:0}

共有1个答案

严宇
2023-03-14

我把它改成使用findOne而不是find,它现在可以工作了。我不太清楚为什么这会有所不同。这是我使用的findOne函数:

User.findOne({'local.rooms': {$elemMatch: {name: req.body.username}}}, function (err, user) {

        if (err){
            return done(err);
        }    

        if (user) {
            console.log("ROOM NAME FOUND");
            req.roomNameAlreadyInUse = true;
            next();

        } else {
            req.roomNameAlreadyInUse = false;
            console.log("ROOM NAME NOT FOUND");
            next();

        }

    });
 类似资料:
  • 问题内容: 我的JSON数据如下所示: 给定文本“ foo”,我想返回所有具有此子字符串的元组。但是我不知道如何编写相同的查询。 我遵循了这个相关的答案,但不知道该怎么做。 这是我现在正在工作的内容: 我不想传递整个文本,而是传递并获得与该文本匹配的结果。 问题答案: 您的解决方案可以进一步简化: 或更简单一点,因为在此示例中,您实际上根本不需要行类型(): dbfiddle 在这里 但这 不是

  • 问题内容: 我使用 PostgreSQL 9.5 和Rails5。我想查询下面显示的包含JSON对象数组的列,以返回包含并执行计数的所有JSON数组元素。我使用 的 SQL 显示在json数据下方。运行查询只会返回一个空数组。 这是我的数据: 我想要其中一个sql查询返回: 和另一个查询以返回数组,以便我可以在应用程序中对其调用count,还可以遍历它以创建表单: 我试过这个SQL查询: 我也试过

  • 我使用PostgreSQL 9.5和Rails 5。我想查询下面显示的包含JSON对象数组的jsonb列,以返回包含的所有JSON数组元素,并执行计数 我使用的SQL显示在json数据下面。运行查询只返回一个空数组。 我尝试了这里和这里建议的查询。 这就是我的jsonb数据的样子: 我希望其中一个sql查询返回: 和另一个返回数组的查询,以便我可以在我的应用程序中调用count并循环使用它来创建表

  • 我需要有关嵌套对象数组的查询优化的帮助。 我们有大量文档的集合,每个文档都包含嵌套的对象数组,最高可达3rd级,如下所示: 集合名称:产品 收集文件总数:2000万 每个文档的大小: 我为我的产品集合添加了以下索引,如下所示:, > products.id索引 { “id”:1 } 嵌套数组文档的索引 { " products . sellers . seller _ id ":1 } 我的疑问:

  • 问题内容: 我对mongodb还是很陌生,有一件事我现在无法解决: 假设您有以下文档(简体): 哪个查询将返回json-object,其值等于“ value2”? 这意味着,我需要这个json-object: 当然,我已经尝试了很多可能的查询,但是没有一个返回正确的查询,例如 有人可以帮我看看我在做什么错吗? 谢谢! 问题答案: 使用位置运算符 输出量 使用聚合 输出 使用Java驱动程序 输出

  • 比方说,我有一个购物车的食品杂货,每个项目都有一个唯一的ID。当有人点击“购买”时,会发送一个数组,其中包含购物车中每件商品的对象。购物车各不相同,所以有时可能是2个项目,有时是6个项目,等等。 例子: 我需要我的SQL表“可用的杂货”来根据购买的商品进行更新。 对于一个杂货项目,我会使用以下内容: 既然我现在有多件商品,我如何让查询为购买的每件商品运行?或者作为一个大规模的查询,根据购买的商品数