这是我的代码
AbcSchema.aggregate([
{ $match: query },
{
$lookup: { from: 'xyz', localField: '_id', foreignField: 'place_id', as: 'xyzArray' }
}
])
现在我得到了这个结果:
{
_id : "abc1",
abcfield1 : "...",
abcfield2 : "...",
xyzArray : [{_id : "xyz1", place_id : "abc1", xyzfield1 : "..."},
{_id : "xyz2", place_id : "abc1", xyzfield1 : "..."},
{_id : "xyz3", place_id : "abc1", xyzfield1 : "..."},
...] //all matching results
}
所以现在让我说我只想在xyzArray中找到2个文件,那么我该如何实现呢?
我的要求是将'xyzArray'长度限制为'n'。
答案 0 :(得分:1)
这是动态查询。您可以更改 $ slice 中的数字,以获得所需数量的数组元素。
db.AbcSchema.aggregate([
{ $match: {_id : "abc1"} },
{
$unwind: "$_id"
},
{
$lookup: { from: 'xyz', localField: '_id', foreignField: 'place_id', as: 'xyzArray' }
},
{ $project: { abcfield1 : 1,
abcfield2 : 1,
xyzArrayArray: { $slice: ["$xyzArray", 2] }
}
}
]).pretty();
答案 1 :(得分:0)
使用 $ project 和 $ arrayElemAt
的一种可能解决方案// "T read" is the read line from the CSV.
T value;
var tup = new Tuple<string, string>(name, date);
if (myDictionary.TryGetValue(tup, out value))
{
// modify value by calling the interface method / using the interface property
value.AddVolume();
}
else
{
// add value to list and dictionary
myDictionary.Add(tup, read);
myList.Add(read);
}
示例输出: -
db.AbcSchema.aggregate([
{ $match: {_id : "abc1"} },
{
$unwind: "$_id"
},
{
$lookup: { from: 'xyz', localField: '_id', foreignField: 'place_id', as: 'xyzArray' }
},
{ $project: { abcfield1 : 1,
abcfield2 : 1,
firstxyzArray: { $arrayElemAt: [ "$xyzArray", 0 ] },
secondxyzArray: { $arrayElemAt: [ "$xyzArray", 1 ] }
}
}
]).pretty();