2017-04-04 79 views
-1

我试图通过使用MongoDB.Driver在DocumentDB中实现TTL。我创建的索引等使用MongoDB.Driver在Azure DocumentDB中设置生存时间(TTL)2

await collection.Indexes.CreateOneAsync 
(
    Builders<T>.IndexKeys.Ascending("_id123"), 
    new CreateIndexOptions { ExpireAfter = new TimeSpan(0, 0, 10) } 
); 

上面的代码而没有任何错误被创建_id123指数,但10秒后的插入的数据是不是到期。请帮我解决这个问题。

+1

“不工作” 的意思......什么?是否有错误讯息?什么都没有发生? –

+0

嗨大卫,代码没有返回任何错误,但插入的文档10秒后不会过期。 – Abethan

+0

如果有用,请将其标记为有助于更多社区的答案。 –

回答

0

根据我的经验,请尝试使用_ts field。我们可以从document获得更多信息。 我做了一个在我身边创建TTL索引的演示,它工作正常。以下是详细的步骤。

1.创建C#控制台项目并添加MongoDB SDK

2.增加了一个Person类

using MongoDB.Bson; 
public class Person 
     { 
      public ObjectId Id { get; set; } 
      public string Name { get; set; } 
     } 

3.创建MongoDB的客户端,我们可以从Azure的门户网站的代码。

enter image description here

4.增加文件收集来自Azure的门户

enter image description here

6.Create TTL指数

var db = mongoClient.GetDatabase("dbname"); 

var collection = db.GetCollection<Person>("collectionname"); 

collection.InsertOne(new Person() {Name = "tom"}); 

5.检查上_ts

var indexs = collection.Indexes.CreateOneAsync(Builders<Person>.IndexKeys.Ascending("_ts"), 
new CreateIndexOptions { ExpireAfter = new TimeSpan(0, 0, 10) }).Result; 

enter image description here

Package.config文件

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="MongoDB.Bson" version="2.4.3" targetFramework="net451" /> 
    <package id="MongoDB.Driver" version="2.4.3" targetFramework="net451" /> 
    <package id="MongoDB.Driver.Core" version="2.4.3" targetFramework="net451" /> 
    <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net451" /> 
</packages> 
+0

谢谢Tom Sun。在我的情况下,索引正在成功创建,但插入的数据在Azure DocumentDB中10秒后没有过期。您的测试项目中插入的数据是否在10秒后过期? – Abethan

+0

当我在10秒之后设置过期时,在文档从收集中移除之后,它在我身边正常工作。请尝试使用诸如100秒进行测试。在我的选择中,10秒对测试来说有点短暂。 –

+0

TTL功能由两个级别的TTL属性控制 - 集合级别和文档级别。这些值以秒为单位设置,并作为_ts的增量处理。请使用'_ts'字段。更多信息请参阅[文档](https://docs.microsoft.com/en-us/azure/documentdb/documentdb-time-to-live)。我已更新我的回覆。 –

相关问题