我有多个文件的数据:
{
"_id" : ObjectId("57b68dbbc19c0bd86d62e486"),
"empId" : "1"
"type" : "WebUser",
"city" : "Pune"
}
{
"_id" : ObjectId("57b68dbbc19c0bd86d62e487"),
"empId" : "2"
"type" : "Admin",
"city" : "Mumbai"
}
{
"_id" : ObjectId("57b68dbbc19c0bd86d62e488"),
"empId" : "3"
"type" : "Admin",
"city" : "Pune"
}
{
"_id" : ObjectId("57b68dbbc19c0bd86d62e489"),
"empId" : "4"
"type" : "User",
"city" : "Mumbai"
}
我想根据我的多种条件获取数据:
condition 1:- {"type" : "WebUser", "city" : "Pune"}
condition 2:- {"type" : "WebUser", "city" : "Pune"} & {"type" : "User", "city" : "Mumbai"}
运行条件1时我想要下面的结果:
{
"_id" : ObjectId("57b68dbbc19c0bd86d62e486"),
"empId" : "1"
"type" : "WebUser",
"city" : "Pune"
}
当我跑第二个条件时:
{
"_id" : ObjectId("57b68dbbc19c0bd86d62e486"),
"empId" : "1"
"type" : "WebUser",
"city" : "Pune"
}
{
"_id" : ObjectId("57b68dbbc19c0bd86d62e489"),
"empId" : "4"
"type" : "User",
"city" : "Mumbai"
}
我想通过一个查询获得上述结果,
目前我正在使用以下聚合查询
db.emp.aggregate([
{ $match: { '$and': [
{"type" : "WebUser", "city" : "Pune"},
{"type" : "User", "city" : "Mumbai"}
] } },
{ $group: { _id: 1, ids: { $push: "$empId" } } }
])
以上查询工作的第一个条件&对其他人失败了。请帮帮我。
答案 0 :(得分:7)
对于第二个条件,您可以在查询中使用 $in
运算符:
db.emp.find({
"type" : { "$in": ["WebUser", "User"] },
"city" : { "$in": ["Pune", "Mumbai"] }
})
如果要在聚合中使用:
db.emp.aggregate([
{
"$match": {
"type" : { "$in": ["WebUser", "User"] },
"city" : { "$in": ["Pune", "Mumbai"] }
}
},
{ "$group": { "_id": null, "ids": { "$push": "$empId" } } }
])
或者只是使用distinct()
方法返回与上述查询匹配的不同empIds数组:
var employeeIds = db.emp.distinct("empId", {
"type" : { "$in": ["WebUser", "User"] },
"city" : { "$in": ["Pune", "Mumbai"] }
});
答案 1 :(得分:3)
您可以使用 mongo db $or
运算符。
db.emp.find({ $or: [
{ "type": "WebUser", "city": "Pune" },
{ "type": "user", "city": "Mumbai"}
]})
您可以在数组中传递条件。
更多参考see mongo docs
答案 2 :(得分:0)
如果您正在寻找AND运算符
此示例检查字段是否存在 AND 为空
db.getCollection('TheCollection').find({
$and: [
{'the_key': { $exists: true }},
{'the_key': null}
]
})
此示例检查字段是否具有'value1' OR 'value2'
db.getCollection('TheCollection').find({
'the_key': 'value1',
'the_key': 'value2'
})
仅检查null时,返回值包含不存在的字段以及值为null的字段
db.getCollection('TheCollection').find({'the_key': null})
答案 3 :(得分:0)
显示“StudName”中值为“Ajay Rathod”的文档。
<块引用>db.Student.find({name:"ajay Rathod"})
{ "_id" : ObjectId("5fdd895cd2d5a20ee8cea0de"), "
仅检索学生姓名和成绩。
<块引用>db.Student.find({},{name:1,grade:1,_id:0})
{ "name" : "dhruv", "grade" : "A" }
{ "name" : "jay", "grade" : "B" }
{ "name" : "abhi", "grade" : "C" }
{ "name" : "aayush", "grade" : "A" }
{ "name" : "sukhdev", "grade" : "B" }
{ "name" : "dhruval", "grade" : "B" }
{ "name" : "ajay rathod", "grade" : "D" }
查看更多查询: