2016-01-13 145 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