我正在使用以下聚合查询获取餐馆匹配列表关键字搜索“中国”在传递的ID列表中,
db.business.aggregate([
{
$match:{
$text:{
$search:"chinese"
}
}
},
{
$match:{
"_id":{
$in:[
ObjectId("571453a82ece1392240f7b91"),
ObjectId("5714537b2ece1392240f7b8c"),
ObjectId("5714539a2ece1392240f7b8e"),
ObjectId("571453962ece1392240f7b8d")
]
}
}
},
])
以下是mongodb中的示例数据。
{
"_id" : ObjectId("571453b32ece1392240f7b93"),
"_class" : "com.halal.sa.data.entities.Business",
"name" : "Chillies",
"description" : "nice restaurant",
"cuisine" : [
"veg-nonveg",
"chinese",
"kabab"
],
"address" : {
"streetAddress" : "1000 bentley road",
"city" : "marietta",
"pincode" : 30067,
"landmark" : "near delk road",
"location" : {
"type" : "Point",
"coordinates" : [
-84.4774305,
33.9202151
]
}
},
"phone" : 123,
"email" : "my@email.com",
"ownerEmail" : "test@email",
"status" : "2",
"website" : "test.com",
"authenticity" : "1"
}
请让我知道确切的修改后的聚合查询,它只返回_ids列表,而不是从集合中返回所有文档。提前致谢
答案 0 :(得分:0)
我得到它只是在查询中使用$项目,就是这样: - )
db.business.aggregate([
{ $match: { $text: { $search: "chinese" } } },
{ $match: { "_id": {$in : [ObjectId("571453a82ece1392240f7b91"), ObjectId("5714537b2ece1392240f7b8c"),ObjectId("5714539a2ece1392240f7b8e"),ObjectId("571453962ece1392240f7b8d")]} } },
{$project: {"_id": "$_id"}}
])
答案 1 :(得分:0)
我看到实际上只有一个ID数组的方式(就像您在find中使用distinct一样)将是通过使用$ group
db.business.aggregate([
{
$match:{
$text:{
$search:"chinese"
}
}
},
{
$match:{
"_id": {
$in: [
ObjectId("571453a82ece1392240f7b91"),
ObjectId("5714537b2ece1392240f7b8c"),
ObjectId("5714539a2ece1392240f7b8e"),
ObjectId("571453962ece1392240f7b8d")
]
}
}
},
{ $group: { _id: null, ids: { $push: "$$ROOT._id" } } }
]);
结果基本上会给你类似的东西
[
{
_id: null,
ids: [/* Your ids */],
}
]