IDの配列があり、オブジェクトドキュメントmongodb内の配列内の一致するオブジェクトを更新する必要があります。そうでない場合は、挿入します。

shubham verma

mongodbでドキュメントの配列要素を更新する必要があります。その配列のIDが複数あります。その配列の一致する要素を更新する必要があります。

data= [
   {
    "planId" : "plan_FVNvrmjWT7fRDY", 
    "startTime": ISODate("2019-07-30T07:05:23.000Z")
   },
   {
    "planId" : "plan_FVNvCvm7Qg5uYB", 
    "startTime": ISODate("2019-07-30T07:05:23.000Z"),
   },
   {
    "planId" : "plan_FVNvrmjWT7fRAS", 
    "startTime": ISODate("2019-07-30T07:05:41.000Z"),
   }
   ]

   document = { 
   "_id" : ObjectId("5d3fec3982d76f26f34afdc5"),
   "customerId" : ObjectId("5d383013647a3c42835fd7e6"),
   "__v" : 0,
   "createdAt" : ISODate("2019-07-30T07:05:29.986Z"),
   "subscriptions" : [ 
       {
           "_id" : ObjectId("5d3fec39c81f463a257862d0"),
           "planId" : "plan_FVNvrmjWT7fRDY",
           "startDate" : ISODate("2019-07-30T07:05:23.000Z"),
           "endDate" : ISODate("2019-08-30T07:05:23.000Z"),
           "status" : "Active"
       }, 
       {
           "_id" : ObjectId("5d3fec39c81f463a257862cf"),
           "planId" : "plan_FVNvCvm7Qg5uYB",
           "startDate" : ISODate("2019-07-30T07:05:23.000Z"),
           "endDate" : ISODate("2019-08-30T07:05:23.000Z"),
           "status" : "Active"
       }, 
       {
           "_id" : ObjectId("5d3fec4bc81f463a257862d2"),
           "planId" : "plan_FVNvrmjWT7fRAS",
           "startDate" : ISODate("2019-07-30T07:05:41.000Z"),
           "endDate" : ISODate("2019-08-30T07:05:41.000Z"),
           "status" : "Active"
       }
     ]
}

単一のデータベースクエリで、一致するプランIDの開始日を更新する必要があります。

ĐĵΝιΓΞΗΛψΚ

私はあなたの最善の策はbulkWrite次のようなコマンドを使用することだと思います

db.collection.bulkWrite([
{ updateOne: {
        filter: {
            "subscriptions": {
                "$elemMatch": {
                    "planId": "plan_FVNvrmjWT7fRAS" } } },
        update: {
            "$set": {
                "subscriptions.$.startDate": ISODate("2019-08-02T15:06:06.783Z")
            } } } }, 
{ updateOne: {
        filter: {
            "subscriptions": {
                "$elemMatch": {
                    "planId": "plan_FVNvCvm7Qg5uYB"
                } } },
        update: {
            "$set": {
                "subscriptions.$.startDate": ISODate("2019-08-02T15:06:06.783Z")
            } } } }, 
{ updateOne: {
        filter: {
            "subscriptions": {
                "$elemMatch": {
                    "planId": "plan_FVNvrmjWT7fRDY"
                } } },
        update: {
            "$set": {
                "subscriptions.$.startDate": ISODate("2019-08-02T15:06:06.783Z")
            } } } }])

js / nodeドライバー/クライアントコードについてはお役に立てませんが、興味のある方のために上記のコマンドを生成したc#コードを次に示します。

using MongoDB.Driver;
using MongoDB.Entities;
using System;

namespace StackOverflow
{
    public class Document : Entity
    {
        public Subscription[] subscriptions { get; set; }
    }

    public class Subscription
    {
        public string planId { get; set; }
        public DateTime startDate { get; set; }
    }

    public class Program
    {
        private static void Main(string[] args)
        {
            new DB("test");

            var data = new[] {
                new Subscription {
                    planId = "plan_FVNvrmjWT7fRDY",
                    startDate = DateTime.UtcNow
                },
                new Subscription {
                    planId = "plan_FVNvCvm7Qg5uYB",
                    startDate = DateTime.UtcNow
                },
                new Subscription {
                    planId = "plan_FVNvrmjWT7fRAS",
                    startDate = DateTime.UtcNow
                }
            };

            var bulk = DB.Update<Document>();

            foreach (var sub in data)
            {
                bulk.Match(b => b.ElemMatch(d => d.subscriptions, s => s.planId == sub.planId))
                    .Modify(b => b.Set(d => d.subscriptions[-1].startDate, sub.startDate))
                    .AddToQueue();

            }

            bulk.Execute();
        }
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ