2016-01-13 87 views
1

我需要先通过_id找到该文档。 然后将文档找到子文档其中有一个时间字段中比参数lastTime在子文档中查找MongoDb

var filter = builder.Eq("_id", symbol) & builder.Gt("Update.Time", lastTime); 
var result = await MongoDb.CollectionName.Find(filter).ToListAsync(); 

这个例子具有0

结果如何写这个查询更大?我需要得到这个子文档“更新”或最后3分子文档

该文件具有以下结构

{ 
    {"_id", symbol}, 
    {"Update", [ 
       {"_id", number}, {"Time", sometime}, {"Version", versionNumber}, 
       {"_id", number}, {"Time", sometime}, {"Version", versionNumber}, 
       {"_id", number}, {"Time", sometime}, {"Version", versionNumber}, 
       {"_id", number}, {"Time", sometime}, {"Version", versionNumber},} 
      ] 
} 

回答

0

如果MongoDB的控制台将工作的例子:

> db.doc.save({ 
    "_id":"123", 
    "update":[ 
     {"_id":'1', "time":'345', "Version":'3'}, 
     {"_id":'2', "time":'234', "Version":'4'} 
    ] 
}) 
> db.doc.findOne({ _id:"123", "update.time":{ $gt: 344 } }) 

那么对于C#请问你可以试试吗?

var collection = _database.GetCollection<BsonDocument>("name"); 
var filter = Builders<BsonDocument>.Filter.Gt("update.time", 344); 
var result = await collection.Find(filter).ToListAsync(); 

example

UPD这可以是:

var collection = _database.GetCollection<BsonDocument>("name"); 
var builder = Builders<BsonDocument>.Filter; 
var filter = builder.Eq("_id", id) & builder.Gt("update.time", 344); 
var result = await collection.Find(filter).ToListAsync(); 
+0

谢谢您的答复。我真的看到了这个例子。我的问题是,我需要通过身份证的第一个身份。因为文件太多。首先,我需要通过id找到文档,然后在子文档中进行搜索。 – alexander

+0

你的第二个例子写在我的问题中。它不起作用。 – alexander