我有这些文件
{
"_id" : 1468636149351,
"subject" : 1,
"likes" : [
1,
2,
3
]
}
{
"_id" : 1468677473954,
"subject" : 1,
"likes" : [
1,
4,
3
]
}
我想通过" subject"和"喜欢"并获得所有主题和类似元素相似或不匹配
例如:如果我按"主题":1和"喜欢":2我应该
{
"_id" : 1468636149351,
"subject" : 1,
"likes" : [2]
}
{
"_id" : 1468677473954,
"subject" : 1,
"likes" : []
}
我试过了:
db.collection.find(
{ $or: [ { "subject": 1} , { "subject": 1 , "likes": 1 } ]},
{"likes.$":1})
但我得到错误:位置运算符(like。$)需要查询说明符中的相应字段
答案 0 :(得分:1)
如果您在查询不匹配时不返回likes
数组,则可以尝试这样的操作。
db.collection.find({"subject": 1},{"subject": 1, "likes":{$elemMatch:{$eq:2}}}})
答案 1 :(得分:0)
我尝试使用new File("")
以您指定的方式投影文档。
查询:
$map
输出
db.collection.aggregate([
{
"$match": {
$or : [
{"subject": 1},
{"likes":{$elemMatch:{$eq:2}}}
]
}
},
{
"$project": {
"_id" : "$_id",
"subject" : "$subject",
"likes" : {
"$setDifference": [
{
"$map": {
"input": "$likes",
"as": "likes",
"in": {
"$cond": {
"if": {$eq : ["$$likes" , 2]},
"then": "$$likes",
"else": false
}
}
}
},
[false]
]
}
}
}])