例如我有这样的一些数据,我想以Ps下的_id(101001)为条件,返回只包含Ps._id(101001)的父对象,请问该怎么写。
我感觉我好像已经用Linq查出
var lq = from c in _or.GetAll()
where c.Ps.Any(p => p.Pcode == pCode)
select new { c.OId, P = c.Ps.First(p => p.Pcode == pCode) };
------------------------------------------------------------------
aggregate([{ "$match" : { "Ps._id" : "101064" } }, { "$project" : { "OId" : "$_id", "P" : { "$arrayElemAt" : [{ "$filter" : { "input" : "$Ps", "as" : "p", "cond" : { "$eq" : ["$$p._id", "101064"] } } }, 0] }, "_id" : 0 } }])
db.getCollection('collection').find({"Ps._id":"101001"}, {Ps: false})
{Ps: false}应该就是Project的效果了。但是我这种方式,o.Ps.First时感觉好像是c#处理的并不是Mongodb做的这部分工作。
你有更好的办法吗?
@江上烟波: 没在C#中使用过Mongo,所以不清楚如何处理,如果使用Mongo Shell,那么就应该是我给出的那个语句。
db.getCollection('collection').find({"Ps._id":"101001"})