标题不够可能。让我解释一下。如何在文档中使用两个字段编写查询
假设我有数据库结构
我知道这个数据库结构不尽合理,但我只是想表明在最短的路我的问题。
我想获得location
包含name
字段值的文档。这里university-alex
包括alex
,所以它应该作为查询的结果返回。
到目前为止我做了什么? 我写了这个查询,但无法得到结果。
db.collection.find({location: {$regex: "$name"}})
如何编辑它?
标题不够可能。让我解释一下。如何在文档中使用两个字段编写查询
假设我有数据库结构
我知道这个数据库结构不尽合理,但我只是想表明在最短的路我的问题。
我想获得location
包含name
字段值的文档。这里university-alex
包括alex
,所以它应该作为查询的结果返回。
到目前为止我做了什么? 我写了这个查询,但无法得到结果。
db.collection.find({location: {$regex: "$name"}})
如何编辑它?
我认为你想要达到的效果可以用$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));
});
希望它能帮助,
问候
@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);
});
}
可能的重复https://stackoverflow.com/questions/40984829/in-mongodb-how-to-perform-query-based-on-if-one-string-field-contains-another – JohnnyHK