Dla podstawowego zastosowania meteorów, nazywam to „piętrowym”. Jeśli utworzysz zupełnie nowy projekt i po prostu zdefiniujesz kolekcję, to $pull
operator działa zgodnie z oczekiwaniami:
Konsola:
meteor create tickets
cd tickets
meteor run
Następnie otwórz powłokę i wstaw swoje dane:
meteor mongo
> db.tickets.insert(data) // exactly your data in the question
Następnie po prostu utwórz podstawowy kod i szablon:
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>
Aplikacja powinna działać poprawnie, więc w konsoli przeglądarki wykonaj .update()
(wcięte do czytania):
Tickers.update(
{ "_id": "ZcEvq9viGQ3uQ3QnT" },
{ "$pull": { "entries": { "id": "fc29774dadd7b37ee0dc5e3e" } }}
)
A pozycja jest usuwana z wpisów, a strona jest odświeżana bez pozycji. Więc wszystko zniknęło, zgodnie z oczekiwaniami.
Nawet dodanie pakietów SimpleSchema i Collection2 nie ma tutaj znaczenia:
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
});
}
Ponownie zainicjuj dane i uruchom to samo polecenie w konsoli przeglądarki, a wszystko pozostanie bez zmian.
Sprawdź ten lub jakiekolwiek błędy pisarskie we własnych operacjach lub inne różnice, aby dowiedzieć się, dlaczego to nie działa dla Ciebie.
Sugerowałbym to zdecydowanie, ponieważ „zaczynanie od nowa” w ten sposób pokazuje oczekiwane zachowanie, a jeśli widzisz inne zachowanie, prawdopodobnie jest to problem z inną zainstalowaną wtyczką.
Ale generalnie to działa.