MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Ziehen Sie einen Eintrag aus einem Array über Meteor

Für eine einfache Meteor-Anwendung nenne ich das "Bunk". Wenn Sie ein brandneues Projekt erstellen und einfach die Sammlung definieren, wird die Datei $pull Operator funktioniert wie erwartet:

Konsole:

meteor create tickets
cd tickets
meteor run

Öffnen Sie dann eine Shell und fügen Sie Ihre Daten ein:

meteor mongo

> db.tickets.insert(data)   // exactly your data in the question

Produzieren Sie dann einfach einen einfachen Code und eine Vorlage:

tickers.js

Tickers = new Meteor.Collection("tickers");

if (Meteor.isClient) {

  Template.body.helpers({
    "tickers": function() {
      return Tickers.find({});
    }
  });

}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

tickers.html

<head>
  <title>tickers</title>
</head>

<body>
  <h1>Welcome to Meteor!</h1>

  <ul>
    {{#each tickers}}
      {{> ticker}}
    {{/each}}
  </ul>

</body>

<template name="ticker">
  <li>
    {{_id}}
    <ul>
      {{#each entries}}
        {{> entry }}
      {{/each}}
    </ul>
  </li>
</template>

<template name="entry">
  <li>{{ id }} - {{text}}</li>
</template>

Die Anwendung sollte gut laufen, also führen Sie in Ihrer Browserkonsole .update() aus (zum Lesen eingerückt):

Tickers.update(
    { "_id": "ZcEvq9viGQ3uQ3QnT" },
    { "$pull": { "entries": { "id": "fc29774dadd7b37ee0dc5e3e" } }}
)

Und das Element wird aus den Einträgen entfernt und die Seite wird ohne das Element aktualisiert. Also alles weg, genau wie erwartet.

Selbst das Hinzufügen der SimpleSchema- und Collection2-Pakete macht hier keinen Unterschied:

 meteor add aldeed:simple-schema
 meteor add aldeed:collection2

tickers.js

Tickers = new Meteor.Collection("tickers");

TickerEntries = new SimpleSchema({
  "id": {
    type: String,
    optional: true,
    autoValue: function() {
      if (!this.isSet) {
        return new Mongo.Collection.ObjectID()._str
      }
    }
  },
  "text": {
    type: String
  }
});

Tickers.attachSchema(
  new SimpleSchema({
    entries: { type: [TickerEntries] }
  })
);


if (Meteor.isClient) {

  Template.body.helpers({
    "tickers": function() {
      return Tickers.find({});
    }
  });

}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

Initialisieren Sie die Daten neu und führen Sie denselben Befehl in der Browserkonsole aus, und alles bleibt gleich.

Überprüfen Sie dies oder Tippfehler in Ihren eigenen Vorgängen oder andere Unterschiede, um einen Hinweis darauf zu erhalten, warum dies bei Ihnen nicht funktioniert.

Ich würde dies dringend empfehlen, da "Neustarten" wie hier das erwartete Verhalten zeigt, und wenn Sie ein anderes Verhalten sehen, dann ist es wahrscheinlich ein Problem mit einem anderen Plugin, das Sie installiert haben.

Aber im Allgemeinen funktioniert das.