我有一个具有以下记录结构的MongoDB记录。
{
"_id" : ObjectId("547e29f2421aa9302705679a"),
"runs" : [
{
"datetime" : "2014-04-2813:18:54.959579",
"tag" : "v1.0",
},
{
"datetime" : "2014-11-1122:45:13.841787",
"tag" : "v1.1",
}
],
"person1" : "person1_id",
"person2" : "person2_id"
}
我的一些记录会有更多或更少的runs
,每个记录都有不同的tag
。我正在尝试制定一个查询,告诉我哪些记录的run
带tag=v1.1
但不带有run
的{{1}}。
我刚刚开始学习MongoDB,但我提出了查询:
tag=v1.0
但是,这仍会返回db.mycollection.find( { $and: [
{ runs : { $elemMatch : { tag : 'v1.1' } } },
{ runs : { $elemMatch : { $ne: { tag : 'v1.0' } } } },
]})
的记录。我不知道我在哪里错了。 有人能指出我正确的方向吗?
答案 0 :(得分:1)
我发现在正确的位置使用$not
可以解决问题。
db.mycollection.find( { $and: [
{ runs : { $elemMatch : { tag : 'v1.1' } } },
{ runs : { $not: { $elemMatch : { tag : 'v1.0' } } } },
]}).count()
答案 1 :(得分:1)
您不需要$elemMatch
,可以直接count()
。仅当您想要$elemMatch
或update
数组元素时才使用project
。
db.mycollection.count({$and:[{"runs.tag":"v1.1"},
{"runs.tag":{$not:{"$eq":"v1.0"}}}]})
或find()
db.mycollection.find({$and:[{"runs.tag":"v1.1"},
{"runs.tag":{$not:{"$eq":"v1.0"}}}]})