以下是人员数据库:
[
#1 {qualities: ['brown', 'nice', 'happy' 'cool' 'cheery']}
#2 {qualities: ['blue', 'okay', 'happy' 'decent' 'cheery']}
#3 {qualities: ['green', 'alright', 'happy' 'cool' 'cheery']}
]
以下是人员架构和模型:
var peopleSchema = mongoose.Schema({
qualities: [],
});
var People = mongoose.model('People', peopleSchema);
以下是实际工作的查询:
People.find({'qualities': "cheery"}, function(err, people) {
console.log(people)
});
以下是我想的查询类型:
People.find({'qualities': ["brown", "happy", "cool"]}, function(err, persons) {
console.log(persons)
});
有希望的结果将是#1号人员,其次是#3号人员,其次是#2号人员。
答案 0 :(得分:3)
您可以使用$in
运算符
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
所以查询可以像
People.find({'qualities': {$in: ["brown", "happy", "cool"]}}, function(err, persons) {
console.log(persons)
});
如果您想首先根据最大匹配文档获取数据,则需要使用聚合查询
说你的数据如:
{_id:1, qualities: ['brown', 'nice', 'happy' 'cool' 'cheery']}
{_id:2, qualities: ['blue', 'okay', 'happy' 'decent' 'cheery']}
{_id:3, qualities: ['green', 'alright', 'happy' 'cool' 'cheery']}
然后你的查询就像
People.aggregate([
{$unwind:"$qualities"},
{$match:{'qualities': {$in: ["brown", "happy", "cool"]}}},
{$group:{_id:"$_id",count:{$sum:1}}},
{$sort:{count:-1}}
]).exec(function(err, persons) {
console.log(persons)
});
它将返回 1,3,2 ,因为第一个与 3 相匹配 商品,第三个与 2 商品匹配,第二个与 1 商品相匹配