我有一个数组定义在下面,其中包含一些字符串,
arr = ["hola", "hii", "hey", "namaste"];
以下是我在mongodb中的文件
{
"user_id": "Michael",
"list": ["hola", "ola", "hey", "maybe"]
}
现在我想在mongodb中编写一个查询,它返回所有“arr”元素,这些元素也出现在特定“user_id”的“list”中。
所以我想要的输出是
_id: "_id" : ObjectId("5828ae4779f2e01b06bb7a61"), results: ["hola", "hey"]
我使用聚合写下面的查询,但我收到错误
MongoError: FieldPath field names may not start with '$'
我的代码
arraymodel.aggregate(
{ $match: { user_id: "Michael" }},
{ $unwind: '$list'},
{ $match: {list: {$in: arr}}},
{ $group: {_id: '$_id', results: {$push: '$list.$'}}},
function(err, docs) {
if (err) {
console.log('Error Finding query results');
console.log(err);
} else {
if (docs) {
console.log('docs: ', docs);
} else {
console.log('No Arr Found');
}
}
}
);
答案 0 :(得分:2)
简单地摆脱{$push: '$list.$'}
中的$,您将获得所需的输出。
下面是完整的查询:
db.collection.aggregate(
{$match:{user_id:"Michael"}},
{$unwind:'$list'},
{$match:{list:{$in:["hola","hey"]}}},
{$group:{_id:"$_id",results:{$push:"$list"}}})
答案 1 :(得分:1)
您可以尝试$ setIntersection。
{ "_id" : ObjectId("582c6902a5ff9d6d50e722c3"), "results" : [ "hola", "hey" ] }
示例输出
return listAccounts.Where(acc => acc.UserName.Equals(username));