sql >> Database >  >> NoSQL >> MongoDB

Trek een item uit een array via Meteor

Voor een elementaire meteoortoepassing noem ik dit "stapelbed". Als je een gloednieuw project maakt en eenvoudig de collectie definieert, dan is de $pull operator werkt zoals verwacht:

Console:

meteor create tickets
cd tickets
meteor run

Open vervolgens een shell en voer uw gegevens in:

meteor mongo

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

Produceer dan gewoon wat basiscode en sjabloon:

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>

De applicatie zou goed moeten werken, dus doe in je browserconsole de .update() (ingesprongen om te lezen):

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

En het item wordt verwijderd uit items en de pagina wordt vernieuwd zonder het item. Dus alles is weg, precies zoals verwacht.

Zelfs het toevoegen van de SimpleSchema- en Collection2-pakketten maakt hier geen verschil:

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

Initialiseer de gegevens opnieuw en voer dezelfde opdracht uit in de browserconsole en alles blijft hetzelfde.

Controleer dit of eventuele typefouten in uw eigen bewerkingen of andere verschillen om een ​​idee te krijgen waarom dit niet voor u werkt.

Ik zou dit ten zeerste aanbevelen, aangezien "vers beginnen" op deze manier het verwachte gedrag laat zien, en als je ander gedrag ziet, is het waarschijnlijk een probleem met een andere plug-in die je hebt geïnstalleerd.

Maar over het algemeen werkt dit.



  1. MongoDB.Driver.Builders hoe te groeperen en gemiddeld te krijgen

  2. Query op mongoid hash-veld

  3. Gegevens initialiseren op gedockte mongo

  4. Zoek een string binnen een string in SQL