Ein Migration eines NodeBB-Forums mit MongoDB zu Discourse

Irgendwie habe ich es geschafft, dass die Skriptfunktion richtig funktioniert.

Hier sind meine Änderungen (mit ein wenig Hilfe von einem Claude Code :slight_smile:)

 	>mongo.rb
   
   def posts(offset = 0, page_size = 1000)
      post_keys = mongo.find(_key: "posts:pid").skip(offset).limit(page_size).pluck(:value)
      post_keys
          .map { |pid| post(pid) }
          .compact  # <-- verwirft alle nil-Ergebnisse (verwaiste pids)
      post_keys.map { |post_key| post(post_key) }
    end

    def post(id)
    post = mongo.find(_key: "post:#{id}").first
    return nil if post.nil? # <-- Null-Prüfung
    post["timestamp"] = timestamp_to_date(post["timestamp"])
    if post["upvoted_by"] = mongo.find(_key: "pid:#{id}:upvote").first
        post["upvoted_by"] = mongo.find(_key: "pid:#{id}:upvote").first[:members]
      else
        post["upvoted_by"] = []
      end

      post["pid"] = post["pid"].to_s
      post["deleted"] = post["deleted"].to_s

      post
    end
	
>nodebb.rb

 create_posts(posts, total: post_count, offset: offset) do |post|
        # überspringe, wenn post null ist
		# überspringe, wenn es merged_post ist
        next if post.nil?
        next if @merged_posts_map[post["pid"]]

        # überspringe, wenn es gelöscht ist
        next if post["deleted"] == "1"

        raw = post["content"]
        post_id = "p#{post["pid"]}"

        next if raw.blank?
        topic = topic_lookup_from_imported_post_id("t#{post["tid"]}")

        unless topic
          puts "Topic with id #{post["tid"]} not found, skipping"
          next
        end	

Es scheint jetzt auf die richtige Weise zu funktionieren.

Obwohl ich nicht weiß, wie korrekt dies aus der Sicht der internen Architektur von Discourse ist, scheint es auf den ersten Blick zu funktionieren.

Jeder Vorschlag zur Verbesserung und Optimierung ist herzlich willkommen.

1 „Gefällt mir“