Javascript 仅获取mongodb集合中具有条件的第一个匹配文档
这是我的收藏Javascript 仅获取mongodb集合中具有条件的第一个匹配文档,javascript,node.js,mongodb,mongoose,schema,Javascript,Node.js,Mongodb,Mongoose,Schema,这是我的收藏 [ { _id: "585be0da13385513689f704a", site: "NBT", url: "m.nbt.com", label: "NBT Home", platform: "mobile", speed: 61, date: "2016-12-22T14:18:57.975Z" }, { _id: "585be
[
{
_id: "585be0da13385513689f704a",
site: "NBT",
url: "m.nbt.com",
label: "NBT Home",
platform: "mobile",
speed: 61,
date: "2016-12-22T14:18:57.975Z"
},
{
_id: "585be0da13385513689f704b",
site: "NBT",
url: "nbt.com",
label: "NBT Home",
platform: "desktop",
speed: 75,
date: "2016-12-22T14:15:57.975Z"
},
{
_id: "585be0da13385513689f704c",
site: "MT",
url: "m.mt.com",
label: "MT Home",
platform: "mobile",
speed: 40,
date: "2016-12-22T14:01:57.975Z"
},
{
_id: "585be0da13385513689f704d",
site: "NBT",
url: "m.nbt.com",
label: "NBT Home",
platform: "mobile",
speed: 90,
date: "2016-12-22T12:18:57.975Z"
}
]
预期输出:
[
{
_id: "585be0da13385513689f704b",
site: "NBT",
url: "nbt.com",
label: "NBT Home",
platform: "desktop",
speed: 75,
date: "2016-12-22T14:15:57.975Z"
},
{
_id: "585be0da13385513689f704c",
site: "MT",
url: "m.mt.com",
label: "MT Home",
platform: "mobile",
speed: 40,
date: "2016-12-22T14:01:57.975Z"
},
{
_id: "585be0da13385513689f704d",
site: "NBT",
url: "m.nbt.com",
label: "NBT Home",
platform: "mobile",
speed: 90,
date: "2016-12-22T12:18:57.975Z"
}
]
基本上,我希望首先匹配不同的(标签+平台)组合文档
正如您在colloction中看到的,label-NBT Home出现在3个文档中,但我只想检索label+platform的唯一组合。所以NBT Home for mobile和NBT Home for desktop正是我所期待的
请帮助。试试这个:
db.collection.aggregate([
{
$group:{
_id:{
label:"$label",
platform:"$platform"
},
site:{
$first:"$site"
},
url:{
$first:"$url"
},
speed:{
$first:"$speed"
}
}
}
])
输出:
{
"_id" : {
"label" : "MT Home",
"platform" : "mobile"
},
"site" : "MT",
"url" : "m.mt.com",
"speed" : 40
}
{
"_id" : {
"label" : "NBT Home",
"platform" : "desktop"
},
"site" : "NBT",
"url" : "nbt.com",
"speed" : 75
}
{
"_id" : {
"label" : "NBT Home",
"platform" : "mobile"
},
"site" : "NBT",
"url" : "m.nbt.com",
"speed" : 61
}
在聚合管道中使用,然后使用或
下面的查询是使用$first编写的
db.collection.aggregate([{$group:{ "_id":{"label":"$label", "platform":"$platform"}, "site": {"$first":"$site"}, "url": {"$first":"$url"}, "speed":{"$first":"$speed"}, "date":{"$first":"$date"} } }])
对于具有以下记录的样本采集
db.collection.find()
{ "_id" : "585be0da13385513689f704a", "site" : "NBT", "url" : "m.nbt.com", "labe
l" : "NBT Home", "platform" : "mobile", "speed" : 61, "date" : "2016-12-22T14:18
:57.975Z" }
{ "_id" : "585be0da13385513689f704b", "site" : "NBT", "url" : "nbt.com", "label"
: "NBT Home", "platform" : "desktop", "speed" : 75, "date" : "2016-12-22T14:15:
57.975Z" }
{ "_id" : "585be0da13385513689f704c", "site" : "MT", "url" : "m.mt.com", "label"
: "MT Home", "platform" : "mobile", "speed" : 40, "date" : "2016-12-22T14:01:57
.975Z" }
{ "_id" : "585be0da13385513689f704d", "site" : "NBT", "url" : "m.nbt.com", "labe
l" : "NBT Home", "platform" : "mobile", "speed" : 90, "date" : "2016-12-22T12:18
:57.975Z" }
上面的查询将给出如下结果:
{
"_id": {
"label": "MT Home",
"platform": "mobile"
},
"site": "MT",
"url": "m.mt.com",
"speed": 40,
"date": "2016-12-22T14:01:57.975Z"
}
{
"_id": {
"label": "NBT Home",
"platform": "mobile"
},
"site": "NBT",
"url": "m.nbt.com",
"speed": 61,
"date": "2016-12-22T14:18:57.975Z"
}
{
"_id": {
"label": "NBT Home",
"platform": "desktop"
},
"site": "NBT",
"url ": "nbt.com",
"speed": 75,
"date": "2016-12-22T14:15:57.975Z"
}
这仅返回2条记录,但预期输出有3.MT Home和NBT Home+mobile返回。缺少NBT Home+桌面。@MohitRathi再看一看我发布的输出,返回了3个文档,NBT Home+桌面也存在。这是对您提供的示例文档进行聚合查询的结果。。。