2017-05-05 32 views
4

标题不够可能。让我解释一下。如何在文档中使用两个字段编写查询

假设我有数据库结构

​​

我知道这个数据库结构不尽合理,但我只是想表明在最短的路我的问题。

我想获得location包含name字段值的文档。这里university-alex包括alex,所以它应该作为查询的结果返回。

到目前为止我做了什么? 我写了这个查询,但无法得到结果。

db.collection.find({location: {$regex: "$name"}}) 

如何编辑它?

+0

可能的重复https://stackoverflow.com/questions/40984829/in-mongodb-how-to-perform-query-based-on-if-one-string-field-contains-another – JohnnyHK

回答

0

我认为你想要达到的效果可以用$where操作符完成。 据this part of the documentation

db.collection.find({ $where: function() { 
    return (this.location.includes(this.name)); 
} }); 

或者,你可以通过JS表达式查找方法:

db.collection.find(function() { 
    return (this.location.includes(this.name)); 
}); 

希望它能帮助,
问候

0

@boehm_s的一部分回答是可行并且非常清晰,您还可以创建一个多字段索引,您可以使用它来查找您需要的内容。如果你想执行组合查询方法,这种索引是非常有用的,例如,如果传递的参数与其内容匹配或包含在其中,则查看多个string字段。你可以看看这个文档页面关于Text Indexes。我不知道你是否在使用Mongoose或不是,但this answer可能会有用。

请注意这样一个事实,即我的这种方法会返回所有包含(在一个或两个字段中)您正在查找的“单词”的文档。

你的领域建立索引后

db.collection.createIndex(
    { 
    name: "text", 
    location: "text" 
    } 
) 

假设您已经命名这个指数txtIndex,那么,你可以为节点的方式

. . . 

let userProjection = { 
    "name": 1, 
    "age": 1, 
    "location": 1 
}; 

/** 
* @param req Contains information to find a user 
* @param req.findMe Contains name concatenated to location 
*/ 
let findUsers = (req) => { 
    letUsers = db.collection('users'); 
    return new Promise((resolve, reject) => { 
     User.findOne({'txtIndex': params.body.findMe}, {fields: userProjection},(err, user) => { 
      if (err) { 
       return reject({message: 'MongoDB Error', err: err}); 
      } 
      if (!user) { 
       return reject({message: 'User not found!'}); 
      } 
       return resolve(user); 
     }); 

    }); 
} 

蒙戈驱动程序

猫鼬之路

let Users = require('./users-model.js); 

/** 
    * @param req Contains information to find a user 
    * @param req.findMe Contains name concatenated to location 
    */ 
let findUsers = (req) => { 
    Users.findOne({txtIndex: req.body.FindMe}).then(function (err, user) { 
     if (err) { 
      return reject({message: 'MongoDB Error', err: err}); 
     } 
     if (!user) { 
      return reject({message: 'User not found!'}); 
     } 
      return resolve(user); 
    });  

} 
相关问题