MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Extraire une entrée d'un tableau via Meteor

Pour une application météore de base, j'appelle "superposition" à ce sujet. Si vous créez un tout nouveau projet et définissez simplement la collection, alors le $pull l'opérateur fonctionne comme prévu :

Console :

meteor create tickets
cd tickets
meteor run

Ouvrez ensuite un shell et insérez vos données :

meteor mongo

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

Ensuite, produisez simplement un code et un modèle de base :

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>

L'application devrait fonctionner correctement, donc dans la console de votre navigateur, faites le .update() (en retrait pour la lecture) :

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

Et l'élément est supprimé des entrées et la page est actualisée sans l'élément. Donc tout est parti, comme prévu.

Même l'ajout des packages SimpleSchema et Collection2 ne fait aucune différence ici :

 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
  });
}

Réinitialisez les données et exécutez la même commande dans la console du navigateur et tout reste le même.

Vérifiez ceci ou toute erreur de frappe dans vos propres opérations ou d'autres différences pour savoir pourquoi cela ne fonctionne pas pour vous.

Je le suggère fortement, car "recommencer à neuf" comme celui-ci montre le comportement attendu, et si vous voyez un comportement différent, il s'agit probablement d'un problème avec un autre plugin que vous avez installé.

Mais généralement, cela fonctionne.