2017-11-28 4 views
0

指定されたタイムスタンプ(tsフィールド)の範囲でユニークなuserNamesを取得しようとしています。Mongoクエリーでdistinct + Like

db.auditLog.distinct({"data.userName"}, {ts: /.*05/19/2016*./) 

_id: ObjectId("51d33bc8e4b09d71ea4c45d4") 
ts: 07/02/2013 04:44:56 PM (-0400) 
data: 
    userName: "adminuser" 

からこれはそれではないですが、あなたはおそらく、私がやろうとしています知っています。

可能であれば$ gteと$ ltも使用したいと思います。

答えて

3

あなたの構文はほぼ正しいです。 distinct()の最初のパラメータは、ドキュメントではなく、フィールド名(文字列)をとります。

db.auditLog.distinct("data.userName", {ts: /.*05/19/2016*./}) 

これはあなたのtsフィールドが文字列であるという仮定に基づいています。そうでなければ、正規表現でそれを照会することは意味をなさないでしょう...

+0

私はdb.auditLog.distinct( "data.userName"、{ts:/**2016*./})の形でそれを試してみましたが、2013年、2017年なども試しましたが、 []を返します。 Even /.*19./は何も返さない。 data.userNameだけでdistinctを使用すると、複数のuserNamesが返されます。おそらくTSは文字列ではありませんか? – user2568374

0

[OK]を、私はそれを動作させることができる場所に私を近づけるための明確化と感謝の欠如のため申し訳ありません。

db.auditLog.distinct("data.userName", {ts: { $gte : new ISODate("2017-01-01") }}) 

これは機能します。