2017-10-12 20 views
0

を文書を削除します。私は、特定の「ID」を持つすべての文書を削除したい
私は次のような構造を持つ文書を保存するコレクション持つ日付フィールドの「時間」に基づいて、MongoDBのコレクションから

{ 
    "_id" : NumberLong(-6225637853094968071), 
    "Id" : "1585534", 
    "Type" : NumberInt(42), 
    "InDate" : ISODate("2017-10-05T18:30:00.000+0000"), 
} 
{ 
    "_id" : NumberLong(-622563784353458071), 
    "Id" : "15832422", 
    "Type" : NumberInt(42), 
    "InDate" : ISODate("2017-10-06T00:00:00.000+0000"), 
} 

を「InDate」フィールドに時間がある「タイプ」18:30:00.000+0000。このクエリを使用して試しました:

db.collection.remove({ 
"ChannelType": NumberInt(28), 
"HotelId": "1585534", 
"CheckInDate": /$18:30:00.000+0000/ 
}) 

しかし、うまくいきません。これを行う方法?

答えて

1

クエリでisodate使用する必要があります。実際にはBSON Dateを単純な方法で選択することはできません。

時刻の日付値の一部に一致するように、$where条件を追加ロジックで指定します。実際に問題に供給されたデータに基づいて

、その値が間にユニークであるので、それは本当にただとにかく "Id"で識別されますにもかかわらず、もちろん提供されたデータでちょうど最初の文書である
db.getCollection('collection').remove({ 
    "Id": "1585534", 
    "Type": NumberInt(42), 
    "$where": function() { 
    return this.InDate.getUTCHours() === 18 
     && this.InDate.getUTCMinutes() === 30 
    } 
}) 

二。

.getUTCHours()

.getUTCMinutes()$where表現内で使用される場合BSON Dateが発現されている方法であるJavaScriptのDateオブジェクトのメソッドです。


自明、MongoDBの3.6(書き込みのような今後は)凝集式で$whereより効率的な形式を使用できます

db.getCollection('collection').aggregate([ 
    { "$match": { 
    "Id": "1585534", 
    "Type": NumberInt(42), 
    "$expr": { 
     "$and": [ 
     { "$eq": [{ "$hour": "$InDate" }, 18 ] }, 
     { "$eq": [{ "$minute": "$InDate" }, 30] } 
     ] 
    } 
    }} 
]) 

そのような表現は、.remove()又は.deleteMany()などの方法で直接使用することができないが、 $whereの式を使用できます。

0

ISO日付を文字列に一致していない、あなたは正規表現が文字列でない何かに動作しませんあまりにも

db.collection.remove({ 
    "ChannelType": NumberInt(28), 
    "HotelId": "1585534", 
    "InDate": ISODate(2017-10-05T18:30:00.000+0000) 
}) 
+0

これも有効な値ではないため、動作しません。おそらく、実際にあなたが答えを出す前にシェルで試してみたはずです。 –

+0

それを試しました、間違ったコピー/過去。それを更新しました。間違いを表示してくれてありがとう – sheplu

+1

私は質問の精神が「複数の可能な日付」であることを信じています。それゆえ、最初に間違った構文を試したのはなぜですか。なぜなら、依然として不正確な構文が修正されたとしても、なぜあなたはまだ間違っているのでしょうか。 –

関連する問題