sql >> Database teknologi >  >> NoSQL >> MongoDB

Træk en post fra et array via Meteor

For en grundlæggende meteorapplikation kalder jeg "køje" på dette. Hvis du opretter et helt nyt projekt og blot definerer samlingen, så $pull operatør fungerer som forventet:

Konsol:

meteor create tickets
cd tickets
meteor run

Åbn derefter en shell og indsæt dine data:

meteor mongo

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

Så skal du bare lave en grundlæggende kode og skabelon:

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>

Applikationen burde køre fint, så i din browserkonsol skal du udføre .update() (indrykket til læsning):

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

Og elementet fjernes fra poster, og siden opdateres uden elementet. Så alt er væk, lige som forventet.

Selv tilføjelse af SimpleSchema- og Collection2-pakkerne gør ingen forskel her:

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

Geninitialiser dataene og kør den samme kommando i browserkonsollen, og alt forbliver det samme.

Tjek dette eller eventuelle tastefejl i dine egne operationer eller andre forskelle for at få et fingerpeg om, hvorfor dette ikke virker for dig.

Jeg vil kraftigt foreslå dette, da "at starte på en frisk" som dette viser den forventede adfærd, og hvis du ser anderledes adfærd, er det sandsynligvis et problem med et andet plugin, du har installeret.

Men generelt virker dette.



  1. MongoDB på en Windows 7-maskine:Der kunne ikke oprettes forbindelse

  2. Del sessioner mellem php og node

  3. LogicException:Sørg for, at PHP Redis-udvidelsen er installeret og aktiveret

  4. MongoDB Duplicate Documents, selv efter tilføjelse af unik nøgle